我知道这并不会减少所涉及的熵的很大一部分,而且即使 GUID 的另一个字符被保留(出于任何目的),我们仍然有足够的空间让每只昆虫拥有一个,所以我并不担心,只是好奇。
As 这个很好的答案表明,版本4生成 GUID 的算法具有以下格式:
xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
- x 是随机的
- 4是常量,这代表版本号。
- y 是以下之一:8、9、A 或 B
The UUID 的 RFC 规范说这些位必须这样设置,但我没有看到任何给出的理由。
为什么第三个项目符号(第 17 位数字)仅限于这四位数字?
位,非十六进制
专注于十六进制数字让你感到困惑。
UUID 不是由十六进制组成的。 AUUID由128位组成。
人类会讨厌阅读一系列128 bits呈现为一长串1
and 0
人物。因此,为了人类读写的方便,我们将 128 位表示为十六进制。
请始终记住,当您看到一系列带有连字符的 36 个十六进制字符时,您就处于not查看 UUID。您正在查看生成的一些文本,用于表示 UUID 中实际包含的 128 位文本。
版本和变体
你提到的第一个特殊含义是“版本”UUID,使用记录4 bits. See 第4.1.3节您链接的规格。
您指出的第二个特殊含义是“变体”。该值占用 1-3 位。这见第 4.1.1 节您链接的规格。
一个十六进制字符代表 4 位(半个octet).
- The Version数字是 4 位,它本身就是一个完整的十六进制字符。
- 版本 4 特别使用了这些位
01 00
十六进制表示为4
十进制(以 10 为基数)数字也是如此。
- The Variant,为 1-3 位,确实not取整个十六进制字符。
- Outside the Microsoft world of GUIDs, the rest of the industry nowadays uses two bits:
10
, for a decimal value of 2, as the variant. This pair of bits lands in the most significant bits of octet # 8. That octet looks like this, where ‘n’ means 0 or 1: 10 nn nn nn
. A pair of hex characters represent each half of that octet. So your 17th hex digit, the first half of that 8th octet, 10 nn
, can only have four possible values:
-
10 00
(hex 8)
-
10 01
(hex 9)
-
10 10
(hex A)
-
10 11
(hex B)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)