5.4. UUID Version 4
5.4. UUID Version 4
UUIDv4 は、真の乱数または擬似乱数から UUID を生成するためのものです。
実装では、図 8 の UUID フィールドを埋めるために使用される 128 ビットのランダムデータを生成できます。次に、UUID バージョンとバリアントがセクション 4.1 および 4.2 で定義されているように、それぞれのビットを置き換えます。
あるいは、実装では random_a、random_b、および random_c に必要な正確なビット数 (合計 122 ビット) をランダムに生成し、必要な位置にバージョンとバリアントを連結することを選択できます。
ランダムデータ生成のガイドラインについては、セクション 6.9 を参照してください。
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| random_a |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| random_a | ver | random_b |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|var| random_c |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| random_c |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
図 8: UUIDv4 フィールドとビットレイアウト
フィールド定義:
random_a: レイアウトの最初の 48 ビットで、セクション 6.9 で指定されているようにランダムデータで埋めることができます。ビット 0 から 47 (オクテット 0-5) を占有します。
ver: セクション 4.2 で定義されている 4 ビットのバージョンフィールドで、0b0100 (4) に設定されます。オクテット 6 のビット 48 から 51 を占有します。
random_b: レイアウトのさらに 12 ビットで、セクション 6.9 に従ってランダムデータで埋めることができます。ビット 52 から 63 (オクテット 6-7) を占有します。
var: セクション 4.1 で定義されている 2 ビットのバリアントフィールドで、0b10 に設定されます。オクテット 8 のビット 64 と 65 を占有します。
random_c: var フィールドの直後のレイアウトの最後の 62 ビットで、セクション 6.9 に従ってランダムデータで埋められます。ビット 66 から 127 (オクテット 8-15) を占有します。