gpt4 book ai didi

uuid - 为什么版本 4 GUID 的第 17 位数字仅限于 4 种可能性?

转载 作者:行者123 更新时间:2023-12-02 11:09:17 25 4
gpt4 key购买 nike

我知道这并不会减少所涉及的熵的很大一部分,而且即使 GUID 的另一个字符被保留(出于任何目的),我们仍然有足够的信息来让每只昆虫有一个,所以我不担心,只是好奇。

this great answer显示,Version 4生成 GUID 的算法具有以下格式:

xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
  1. x 是随机的
  2. 4 是常量,代表版本号。
  3. y 是以下之一:8、9、A 或 B

RFC spec for UUIDs说这些位必须这样设置,但我没有看到任何给出的原因。

为什么第三个项目符号(第 17 位数字)仅限于这四位数字?

最佳答案

位,非十六进制

关注hexadecimal digits让你感到困惑。

UUID 不是由十六进制组成的。一个UUID由 128 位组成。

人类会讨厌阅读一系列 128 bits显示为由 10 字符组成的长字符串。因此,为了便于人类读写,我们将 128 位表示为十六进制。

请始终记住,当您看到一系列带有连字符的 36 个十六进制字符时,您看到的并不是 UUID。您正在查看生成的一些文本,这些文本代表实际在 UUID 中的 128 位。

版本和变体

您提到的第一个特殊含义是 “version” UUID,使用4 bits记录。请参阅section 4.1.3您链接的规范。

您指定的第二个特殊含义是 “variant” 。该值占用 1-3 位。这请参阅section 4.1.1您链接的规范。

一个十六进制字符代表 4 位(半个 octet )。

  • 版本数字为 4 位,占用整个十六进制字符。
  • 版本 4 特别使用位 01 00,其十六进制为 4,因为它在十进制(基数 10)数字中也是如此。
  • 变体为 1-3 位,采用整个十六进制字符。
  • 除了 Microsoft 的 GUID 世界之外,当今业界的其他公司都使用两位:10(十进制值 2)作为变体。这对位位于第 8 号八位字节的最高有效位。该八位字节如下所示,其中“n”表示 0 或 1:10 nn nn nn。一对十六进制字符代表该八位位组的每一半。因此,第 17 个十六进制数字,即第 8 个八位字节的前半部分,10 nn 只能有四个可能的值:
    • 10 00(十六进制 8)
    • 10 01(十六进制 9)
    • 10 10(十六进制 A)
    • 10 11(十六进制 B)

关于uuid - 为什么版本 4 GUID 的第 17 位数字仅限于 4 种可能性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47230521/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com