Skip to main content

Appendix A. Test Vectors (测试向量)

Appendix A. Test Vectors (测试向量)

UUIDv1 和 UUIDv6 测试向量使用相同的 60 位时间戳: 0x1EC9414C232AB00 (138648505420000000) 2022 年 2 月 22 日星期二下午 2:22:22.000000 GMT-05:00。

UUIDv1 和 UUIDv6 在 clock_seqnode 中使用相同的值; 所有这些值都是用随机数据生成的。对于随机化的 node, 第一个八位字节的最低有效位设置为 1, 如第 6.10 节所述。因此, 起始值 0x9E6BDECED846 更改为 0x9F6BDECED846

用于从 64 位 Unix 时间戳转换为 100 纳秒格里高利时间戳值的伪代码已保留在文档中以供参考。

# Gregorian-to-Unix Offset:
# The number of 100 ns intervals between the
# UUID Epoch 1582-10-15 00:00:00
# and the Unix Epoch 1970-01-01 00:00:00
# Greg_Unix_offset = 0x01b21dd213814000 or 122192928000000000

# Unix 64-bit Nanosecond Timestamp:
# Unix NS: Tuesday, February 22, 2022 2:22:22 PM GMT-05:00
# Unix_64_bit_ns = 0x16D6320C3D4DCC00 or 1645557742000000000

# Unix Nanosecond precision to Gregorian 100-nanosecond intervals
# Greg_100_ns = (Unix_64_bit_ns/100)+Greg_Unix_offset

# Work:
# Greg_100_ns = (1645557742000000000/100)+122192928000000000
# Unix_64_bit_ns = (138648505420000000-122192928000000000)*100

# Final:
# Greg_100_ns = 0x1EC9414C232AB00 or 138648505420000000

图 15: 测试向量时间戳伪代码


A.1. Example of a UUIDv1 Value (UUIDv1 值示例)

-------------------------------------------
field bits value
-------------------------------------------
time_low 32 0xC232AB00
time_mid 16 0x9414
ver 4 0x1
time_high 12 0x1EC
var 2 0b10
clock_seq 14 0b11, 0x3C8
node 48 0x9F6BDECED846
-------------------------------------------
total 128
-------------------------------------------
final: C232AB00-9414-11EC-B3C8-9F6BDECED846

图 16: UUIDv1 示例测试向量


A.2. Example of a UUIDv3 Value (UUIDv3 值示例)

MD5 计算在图 17 中详细说明, 使用 DNS 命名空间 ID 值和名称 "www.example.com"。字段映射和所有值在图 18 中说明。最后, 为了进一步说明版本和变体的位交换, 请参见图 19。

Namespace (DNS):  6ba7b810-9dad-11d1-80b4-00c04fd430c8
Name: www.example.com
------------------------------------------------------
MD5: 5df418813aed051548a72f4a814cf09e

图 17: UUIDv3 示例 MD5

-------------------------------------------
field bits value
-------------------------------------------
md5_high 48 0x5df418813aed
ver 4 0x3
md5_mid 12 0x515
var 2 0b10
md5_low 62 0b00, 0x8a72f4a814cf09e
-------------------------------------------
total 128
-------------------------------------------
final: 5df41881-3aed-3515-88a7-2f4a814cf09e

图 18: UUIDv3 示例测试向量

MD5 hex and dash:      5df41881-3aed-0515-48a7-2f4a814cf09e
Ver and Var Overwrite: xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
Final: 5df41881-3aed-3515-88a7-2f4a814cf09e

图 19: UUIDv3 示例版本/变体位交换


A.3. Example of a UUIDv4 Value (UUIDv4 值示例)

此 UUIDv4 示例通过生成 16 字节随机数据创建, 生成十六进制值 919108F752D133205BACF847DB4148A8。然后使用它来填充字段, 如图 20 所示。

最后, 为了进一步说明版本和变体的位交换, 请参见图 21。

-------------------------------------------
field bits value
-------------------------------------------
random_a 48 0x919108f752d1
ver 4 0x4
random_b 12 0x320
var 2 0b10
random_c 62 0b01, 0xbacf847db4148a8
-------------------------------------------
total 128
-------------------------------------------
final: 919108f7-52d1-4320-9bac-f847db4148a8

图 20: UUIDv4 示例测试向量

Random hex:            919108f752d133205bacf847db4148a8
Random hex and dash: 919108f7-52d1-3320-5bac-f847db4148a8
Ver and Var Overwrite: xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
Final: 919108f7-52d1-4320-9bac-f847db4148a8

图 21: UUIDv4 示例版本/变体位交换


A.4. Example of a UUIDv5 Value (UUIDv5 值示例)

SHA-1 计算形式在图 22 中详细说明, 使用 DNS 命名空间 ID 值和名称 "www.example.com"。字段映射和所有值在图 23 中说明。最后, 为了进一步说明版本和变体的位交换以及 SHA-1 值未使用/丢弃的部分, 请参见图 24。

Namespace (DNS):  6ba7b810-9dad-11d1-80b4-00c04fd430c8
Name: www.example.com
----------------------------------------------------------
SHA-1: 2ed6657de927468b55e12665a8aea6a22dee3e35

图 22: UUIDv5 示例 SHA-1

-------------------------------------------
field bits value
-------------------------------------------
sha1_high 48 0x2ed6657de927
ver 4 0x5
sha1_mid 12 0x68b
var 2 0b10
sha1_low 62 0b01, 0x5e12665a8aea6a2
-------------------------------------------
total 128
-------------------------------------------
final: 2ed6657d-e927-568b-95e1-2665a8aea6a2

图 23: UUIDv5 示例测试向量

SHA-1 hex and dash:    2ed6657d-e927-468b-55e1-2665a8aea6a2-2dee3e35
Ver and Var Overwrite: xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
Final: 2ed6657d-e927-568b-95e1-2665a8aea6a2
Discarded: -2dee3e35

图 24: UUIDv5 示例版本/变体位交换和丢弃的 SHA-1 段


A.5. Example of a UUIDv6 Value (UUIDv6 值示例)

-------------------------------------------
field bits value
-------------------------------------------
time_high 32 0x1EC9414C
time_mid 16 0x232A
ver 4 0x6
time_high 12 0xB00
var 2 0b10
clock_seq 14 0b11, 0x3C8
node 48 0x9F6BDECED846
-------------------------------------------
total 128
-------------------------------------------
final: 1EC9414C-232A-6B00-B3C8-9F6BDECED846

图 25: UUIDv6 示例测试向量


A.6. Example of a UUIDv7 Value (UUIDv7 值示例)

此 UUIDv7 示例测试向量使用一个众所周知的 Unix Epoch 时间戳, 具有毫秒精度, 以填充前 48 位。

rand_arand_b 填充随机数据。

时间戳为 2022 年 2 月 22 日星期二下午 2:22:22.00 GMT-05:00, 表示为 0x017F22E279B0 或 1645557742000。

-------------------------------------------
field bits value
-------------------------------------------
unix_ts_ms 48 0x017F22E279B0
ver 4 0x7
rand_a 12 0xCC3
var 2 0b10
rand_b 62 0b01, 0x8C4DC0C0C07398F
-------------------------------------------
total 128
-------------------------------------------
final: 017F22E2-79B0-7CC3-98C4-DC0C0C07398F

图 26: UUIDv7 示例测试向量