メインコンテンツまでスキップ

4. UUID Format (UUID 形式)

4. UUID Format (UUID 形式)

UUID 形式は 16 オクテット (128 ビット) のサイズです; 次のセクションで説明するバージョンビットと組み合わせたバリアントビットが, より細かい構造を決定します。これらの UUID 形式とレイアウトに関して, ビット定義は 0 から始まり 127 で終わり, オクテット定義は 0 から始まり 15 で終わります。

明示的なアプリケーションまたはプレゼンテーションプロトコル仕様が反対を指定しない限り, 各フィールドは最上位バイトが最初 ("ネットワークバイトオーダー" として知られています) にエンコードされます。

UUID をバイナリ形式に保存するには, すべてのフィールドをビッグエンディアン形式で並べます。ただし, Microsoft のコンポーネントオブジェクトモデル (Component Object Model, COM) GUID は GUID を保存するときにリトルエンディアンを利用するという既知の注意事項があります。これに関する議論 ([MS_COM_GUID] を参照) は, この仕様の範囲外です。

UUID はバイナリデータまたは整数として表現できます。URN と一緒に使用する場合, またはアプリケーションでテキストとして使用する場合, 任意の UUID は, 単一のダッシュ/ハイフンで区切られた複数の大文字または小文字の英数字 16 進文字のグループで構成される "16 進数とダッシュ" 文字列形式で表現する必要があります。データベースで使用する場合は, セクション 6.13 を参照してください。

UUID 文字列表現の正式な定義は, 次の ABNF [RFC5234] によって提供されます:

UUID     = 4hexOctet "-"
2hexOctet "-"
2hexOctet "-"
2hexOctet "-"
6hexOctet
hexOctet = HEXDIG HEXDIG
DIGIT = %x30-39
HEXDIG = DIGIT / "A" / "B" / "C" / "D" / "E" / "F"

[RFC5234] のセクション 2.3 に従って, 英字はすべて大文字, すべて小文字, または大文字と小文字が混在している可能性があることに注意してください。上記の ABNF からこのテキスト表現を使用した UUID の例を図 1 に示します。

f81d4fae-7dec-11d0-a765-00a0c91e6bf6

図 1: 文字列 UUID 形式の例

図 1 の同じ UUID は, バイナリ (図 2), 符号なし整数 (図 3), および [RFC8141] で定義された URN (図 4) として表されます。

111110000001110101001111101011100111110111101100000100011101000
01010011101100101000000001010000011001001000111100110101111110110

図 2: バイナリ UUID の例

329800735698586629295641978511506172918

図 3: 符号なし整数 UUID の例 (10 進数として表示)

urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6

図 4: UUID の URN 名前空間の例

UUID 形式を定義する方法は他にも多数あります; いくつかの例を以下に詳述します。これは完全なリストではなく, 情報提供のみを目的として提供されていることに注意してください。

  • [Python] や [Microsoft] にあるような一部の UUID 実装は, ダッシュを含む文字列形式で UUID を出力し, 中括弧で囲みます。
  • [X667] は, OID で UUID を使用するための UUID 形式定義を提供します。
  • [IBM_NCS] は, 表 1 のバリアント 0xx と互換性のある独自の UUID 形式を生成するレガシー実装です。

4.1. Variant Field (バリアントフィールド)

バリアントフィールドは UUID のレイアウトを決定します。つまり, UUID 内の他のすべてのビットの解釈は, バリアントフィールド内のビットの設定に依存します。したがって, より正確には "タイプ" フィールドと呼ぶことができます; 互換性のために元の用語を保持しています。バリアントフィールドは, UUID のオクテット 8 の最上位ビットの可変数で構成されます。

表 1 は, バリアントフィールドの内容を示しています。文字 "x" は "無関係" 値を示します。

MSB0MSB1MSB2MSB3バリアント説明
0xxx1-7予約済み。ネットワークコンピューティングシステム (Network Computing System, NCS) の下位互換性, およびセクション 5.9 のニル UUID を含みます。
10xx8-9,A-Bこの文書で指定されているバリアント。
110xC-D予約済み。Microsoft Corporation の下位互換性。
111xE-F将来の定義のために予約されており, セクション 5.10 の最大 UUID を含みます。

表 1: UUID バリアント

ここで定義されているバリアント以外のバリアントとの相互運用性は, いかなる形式でも保証されませんが, 実際には問題になる可能性は低いです。

具体的には, この文書の UUID の場合, UUID のビット 64 と 65 (オクテット 8 のビット 0 と 1) は, 表 1 の行 2 で指定されているように 1 と 0 に設定する必要があります。したがって, すべてのビットとフィールドのレイアウトは, これらのビットの使用を回避します。

4.2. Version Field (バージョンフィールド)

バージョン番号は, オクテット 6 の最上位 4 ビット (UUID のビット 48 から 51) にあります。

表 2 は, この文書で指定されているこの UUID バリアント 10xx のすべてのバージョンを示しています。

MSB0MSB1MSB2MSB3バージョン説明
00000未使用。
00011この文書で指定されているグレゴリオ時間ベースの UUID。
00102埋め込み POSIX UUID を持つ DCE セキュリティバージョン用に予約済み。
00113この文書で指定されている MD5 ハッシュを使用する名前ベースのバージョン。
01004この文書で指定されているランダムまたは疑似ランダムに生成されたバージョン。
01015この文書で指定されている SHA-1 ハッシュを使用する名前ベースのバージョン。
01106この文書で指定されている並べ替えられたグレゴリオ時間ベースの UUID。
01117この文書で指定されている Unix エポック時間ベースの UUID。
10008この文書で指定されているカスタム UUID 形式用に予約済み。
10019将来の定義のために予約済み。
101010将来の定義のために予約済み。
101111将来の定義のために予約済み。
110012将来の定義のために予約済み。
110113将来の定義のために予約済み。
111014将来の定義のために予約済み。
111115将来の定義のために予約済み。

表 2: この仕様で定義された UUID バリアント 10xx バージョン

UUIDv4 のバージョン/バリアントレイアウトの例は表の後に続きます。"M" は 0x4 (0b0100) の 16 進表現のバージョン配置を表し, "N" はバリアント 10xx の 4 つの可能な 16 進表現のいずれかのバリアント配置を表します: 0x8 (0b1000), 0x9 (0b1001), 0xA (0b1010), 0xB (0b1011)。

00000000-0000-4000-8000-000000000000
00000000-0000-4000-9000-000000000000
00000000-0000-4000-A000-000000000000
00000000-0000-4000-B000-000000000000
xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx

図 5: UUIDv4 バリアントの例

表 1 にある他の残りの UUID バリアントは, 異なるサブタイピングまたはバージョン管理メカニズムを利用していることに注意してください。残りの UUID バリアントとサブタイピングの組み合わせの記録と定義は, この文書の範囲外です。