Appendix A. 测试向量
Appendix A. 测试向量
UUIDv1 和 UUIDv6 测试向量都使用相同的 60-bit 时间戳: 0x1EC9414C232AB00 (138648505420000000) Tuesday, February 22, 2022 2:22:22.000000 PM GMT-05:00.
UUIDv1 和 UUIDv6 都在 clock_seq 和 node 中使用相同的值; 这些值全部由随机数据生成. 对于随机化的 node, 按 Section 6.10, 第一个 octet 的最低有效 bit 被设为 1. 因此, 起始值 0x9E6BDECED846 被改为 0x9F6BDECED846.
本文档保留了用于将 64-bit Unix 时间戳转换为 100 ns Gregorian 时间戳值的伪代码, 供参考.
# 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
Figure 15: 测试向量时间戳伪代码
A.1. 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
Figure 16: UUIDv1 示例测试向量
A.2. UUIDv3 值示例
Figure 17 详细展示了使用 DNS Namespace ID 值和 Name "www.example.com" 的 MD5 计算过程. 字段映射和所有值如 Figure 18 所示. 最后, 为进一步说明 version 和 variant 的 bit 替换, 见 Figure 19.
Namespace (DNS): 6ba7b810-9dad-11d1-80b4-00c04fd430c8
Name: www.example.com
------------------------------------------------------
MD5: 5df418813aed051548a72f4a814cf09e
Figure 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
Figure 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
Figure 19: UUIDv3 示例 Ver/Var bit 替换
A.3. UUIDv4 值示例
此 UUIDv4 示例通过生成 16 byte 随机数据创建, 得到十六进制值 919108F752D133205BACF847DB4148A8. 随后使用该值填充各字段, 如 Figure 20 所示.
最后, 为进一步说明 version 和 variant 的 bit 替换, 见 Figure 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
Figure 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
Figure 21: UUIDv4 示例 Ver/Var bit 替换
A.4. UUIDv5 值示例
Figure 22 详细展示了使用 DNS Namespace ID 值和 Name "www.example.com" 的 SHA-1 计算形式. 字段映射和所有值如 Figure 23 所示. 最后, 为进一步说明 version 和 variant 的 bit 替换以及 SHA-1 值中未使用/丢弃的部分, 见 Figure 24.
Namespace (DNS): 6ba7b810-9dad-11d1-80b4-00c04fd430c8
Name: www.example.com
----------------------------------------------------------
SHA-1: 2ed6657de927468b55e12665a8aea6a22dee3e35
Figure 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
Figure 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
Figure 24: UUIDv5 示例 Ver/Var bit 替换和丢弃的 SHA-1 片段
A.5. 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
Figure 25: UUIDv6 示例测试向量
A.6. UUIDv7 值示例
此 UUIDv7 示例测试向量使用一个众所周知且精度为毫秒的 Unix Epoch 时间戳来填充前 48 bit.
rand_a 和 rand_b 使用随机数据填充.
时间戳为 Tuesday, February 22, 2022 2:22:22.00 PM 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
Figure 26: UUIDv7 示例测试向量