UUID (Universally Unique Identifier) は空間的・時間的に一意な識別子です。UUIDは、極めて短い間しか存在しないオブジェクトの特定からネットワーク上で長い間存在するオブジェクトを確実に識別するなど多目的に使用することができます。
UUID (Universally Unique Identifier) は空間的・時間的に一意な識別子です。UUIDは、極めて短い間しか存在しないオブジェクトの特定からネットワーク上で長い間存在するオブジェクトを確実に識別するなど多目的に使用することができます。
UUIDの作成にあたって個々の識別子を何らかの認定機関に登録する必要はありません。そのかわり、各 UUID ジェネレータで一意な値を必要とします。この空間的にユニークな値は通常ネットワーク接続システムで適用されているIEEE 802アドレスで特定されます。
UUIDにはいくつかのバージョンがある。
バージョン | 説明 |
---|---|
1 | MACアドレス及び日付時刻から生成するUUID |
2 | MACアドレス、日付時刻及びPOSIXユーザIDから生成するUUID |
3 | URL、完全修飾ドメイン名、オブジェクト識別子及び識別名から生成するUUID |
4 | 擬似乱数から生成するUUID |
UUID はフィールド間にパディングを含まない128ビットの領域から構成されます。
UUIDを16進数の文字列で表現するときは次のように表記する。
<time_low>-<time_mid>-<time_hi_and_version>-<clock_seq_hi_and_reserved><clock_seq_low>-<node>
例)2fac1234-31f8-11b4-a222-08002b34c003
フィールド | データ型 |
---|---|
time_low | Unsigned 32-bit integer |
time_mid | Unsigned 16-bit integer |
time_hi_and_version | Unsigned 16-bit integer |
clock_seq_hi_and_reserved | Unsigned 8-bit integer |
clock_seq_low | Unsigned 8-bit integer |
node | Unsigned 48-bit integer |
タイムスタンプは符号なし60ビット整数値である。UUID バージョン1では 1582年10月15日 00:00:00.00 からの経過時間を 100 ナノ秒単位で表した UTC(Coordinated Universal Time)として格納されます。
15 14 13 12 | 11 10 09 08 07 06 05 04 03 02 01 00 |
version | time_hi |
bit | 説明 |
---|---|
0001 | バージョン1 |
0010 | バージョン2 |
0011 | バージョン3 |
0100 | バージョン4 |
07 | 06 | 05 04 03 02 01 00 |
1 | 0 | clock_seq_hi |
Windows に Microsoft Visual C++ がインストールしてあれば、UUID は uuidgen コマンドを使用して作成することができます。
C:\> cd "\Program Files\DevStudio\VC\bin"
C:\Program Files\DevStudio\VC\bin> uuidgen
0e452ba0-0a41-11d2-bd1b-00003987a102
JavaでUUIDを生成するには、java.util.UUIDクラスを使用する。ただし、java.util.UUIDクラスで生成されるのはバージョン4のUUIDである。JavaにはMACアドレスを取得する機能は組み込まれていない。MACアドレスを取得するにはJNIを使用するか、C言語等のネイティブな機能を呼び出すメソッドを用いなければならない。
public static UUID randomUUID()
JavaでUUIDを生成するサンプルを次に示す。
class UUIDSample {
public static void main(String[] args) {
String uuid = java.util.UUID.randomUUID().toString();
System.out.println(uuid);
}
}
上記Javaサンプルの実行結果の例を次に示す。
e7d6f43-dcec-423c-88e4-c20c57362cf1
Windows NT 4.0の場合、レジストリ内の
NetworkAddress
値からMACアドレスを取得できます。
レジストリキー:\\HKEY_LOCAL_MACHINE\SOFTWARE\
MACアドレスを取得するC言語プログラムの例を次に示します。
HKEY hKey;
char szAddress[256];
DWORD dwType, dwBytes;
RegOpenKeyEx(HKEY_LOCAL_MACHINE,
"SOFTWARE\Description\Microsoft\Rpc\UuidTemporaryData",
0, KEY_ALL_ACCESS, &hKey);
RegQueryValueEx(hKey, "NetworkAddress", NULL, &dwType, szAddress, &dwBytes);
Linux コマンドでMACアドレスを取得するには、ip 又は ifconfig コマンドを実行する。
$ ip link show eth0
5: eth0: <> mtu 1500 group default qlen 1
link/ether 54:04:da:65:80:86
$ ifconfig -a
lo0: flags=849<UP,LOOPBACK,RUNNING,MULTICAST> mtu 8232
inet 127.0.0.1 netmask ff000000
le0: flags=863<UP,BROADCAST,NOTRAILERS,RUNNING,MULTICAST> mtu 1500
inet 133.113.94.53 netmask ffffff00 broadcast 133.113.94.255
ether 8:0:20:18:4b:b4
RFC 4122
Oracle (2020) UUID (Java Platform SE 8)
Internet Engineering Task Force (2005) A Universally Unique IDentifier (UUID) URN Namespace