UUIDフォーマット解説 (8-4-4-4-12)
UUIDの文字列フォーマットを解説。32桁の16進数が8-4-4-4-12の形式で128ビットを表現する仕組み、各セクションの意味、バージョンとバリアントの読み取り方を説明します。
Format
詳細な説明
UUID(Universally Unique Identifier)は128ビットの値で、通常32桁の16進数が4つのハイフンで区切られた 8-4-4-4-12 のパターンで表現されます:xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx。
文字列フォーマットの構造:
550e8400-e29b-41d4-a716-446655440000
| | | | | | | | | |
| 8 | | 4| | 4| | 4| | 12 |
| | | | | | | | | |
time_lo mid ver var node/random
+hi +seq
- グループ1(8桁 = 32ビット): v1では
time_low。v7ではタイムスタンプの上位32ビット。v4ではランダム。 - グループ2(4桁 = 16ビット): v1では
time_mid。v7ではタイムスタンプの下位16ビット。v4ではランダム。 - グループ3(4桁 = 16ビット): 最初の桁(
M)がバージョン番号。残りの12ビットはバージョンによって異なります。 - グループ4(4桁 = 16ビット): 最初の桁(
N)の上位ビットがバリアントをエンコード。標準UUIDでは最初の16進数字は8、9、a、bのいずれか(2進数で10始まり)。残りのビットはクロックシーケンスまたはランダム。 - グループ5(12桁 = 48ビット): v1ではノードID(MACアドレス)。v4とv7ではランダムデータ。
バージョンの読み取り方: 3番目のグループの最初の文字を見ます。4 ならv4、7 ならv7、1 ならv1、のように判別できます。
バリアントの読み取り方: 4番目のグループの最初の文字を見ます。8、9、a、b ならRFC 4122/9562バリアントです。0〜7 はレガシーNCSバリアント、c〜f はレガシーMicrosoftバリアントを示します。
大文字・小文字の区別: RFCの規定により、UUIDは大文字・小文字を区別しません。550E8400-E29B-41D4-A716-446655440000 と 550e8400-e29b-41d4-a716-446655440000 は同じUUIDを表します。ほとんどの実装は小文字を出力し、RFC 9562では新しい実装には小文字を推奨しています。
その他の表現形式:
- ハイフンなし:
550e8400e29b41d4a716446655440000(32文字) - URN形式:
urn:uuid:550e8400-e29b-41d4-a716-446655440000 - バイナリ:16バイトの生データ(最もコンパクト、データベースで使用)
- Base64:22文字(例:
VQ6EAOKbQdSnFkRmVUQAAA==)
ユースケース
UUIDのフォーマットを理解することは、分散システムのデバッグに不可欠です。バージョン桁とバリアントビットを読むことで、UUIDがどのように生成され、何の情報をエンコードしているかをすばやく判別できます。