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

2023-11-27

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

As 这个很好的答案表明,版本4生成 GUID 的算法具有以下格式:

xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
  1. x 是随机的
  2. 4是常量,这代表版本号。
  3. 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(使用前将#替换为@)

为什么版本 4 GUID 的第 17 位数字仅限于 4 种可能性? 的相关文章

  • “null this”是否可以接受扩展方法的使用? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 将 .NET Guid 转换为 MongoDB ObjectID

    如何将 NET GUID 转换为 MongoDB ObjectID 在 C 中 另外 我可以将其再次从 ObjectID 转换回相同的 GUID 吗 你无法转换ObjectId into GUID反之亦然 因为它们是两个不同的东西 不同的大
  • c# System.guid 不包含 Parse 的定义

    AT Anchor System Guid Parse DataBinder Eval e Item DataItem Anchor ToString 这会抛出 System Guid does not contain a definiti
  • 带有 uuid 字段的 Django 迁移生成重复值

    我有一个uuid字段 不是主键 生成的迁移是 from future import unicode literals from django db import migrations models import uuid class Mig
  • GUID 作为 SQLite 的唯一键

    I found 使用 python 生成 GUID 例程 http code activestate com recipes 163604 运行代码给出以下结果 GUID 00000129e0e72d9b2aab3c1500ac001000
  • laravel uuid 作为主键

    我正在尝试将 uuid 设置为 Laravel 模型中的主键 我已经完成了在我的模型中设置启动方法的工作here https github com webpatser laravel uuid所以我不必每次想要创建和保存模型时都手动创建它
  • 无法从 Crashlytics 找到 UUID 的 dsym 文件

    请帮助我找到 Crashlytics 提示给定 UUID 缺少 dSYM 的问题 我已搜索了所有 dSYM 文件 但未找到给定的 UUID 我用过这个命令 mdfind com apple xcode dsym uuids lt gt 从
  • Binary(16) 字段截断 Guid 的尾随零

    在 C 中 我有一个byte 名为 UniqueId 的字段 我将此字段作为 Binary 16 存储在 SQL Server 数据库 EF6 中 我注意到有时 存储的 guid 是 15 个字节而不是 16 个字节 当我这样做时 这会导致
  • 如何初始化常量 CLSID

    类 ID GUID 通常使用由破折号分隔的十六进制数字序列来指定 例如 557cf406 1a04 11d3 9a73 0000f81ef32e 这不是可用于直接初始化 CLSID 结构的文字 我发现了两种初始化结构的方法 但它们都有点尴尬
  • 在 Delphi IDE 中生成新的随机 GUID

    如何在 Delphi IDE 中生成随机的新 GUID 我使用的是Delphi 2007 Just press Ctrl Shift G
  • GUID 可以多短?

    我知道标准 GUID 它们可以变得更短吗 其背后的理论是什么 Greg Dean 的答案是正确的 但为了了解 GUID 是如何生成的以及为什么不应该缩短它 我强烈建议您阅读下面的文章 新旧事物 GUID 是全局唯一的 但 GUID 的子字符
  • 与 Microsoft 完全一样生成 BIOS 制造商 HWID(来自 SHA-1 的 GUID)

    SCENARIO 我想学习 在C or VB NET 如何生成硬件 ID 基于微软开发人员为此所做的相同方法 首先 在继续之前 我必须声明这个问题是从另一个问题派生出来的一个更好的具体不同问题 像 Microsoft 一样获取硬件 ID h
  • MySql 插入选择 uuid()

    假设你有一张桌子 item 有字段 id VARCHAR 36 NOT NULL order BIGINT UNSIGNED NOT NULL And Unique id 然后你打电话 INSERT INTO item item id it
  • 如何以编程方式获取 Linux 中设备/分区的 uuid?

    我对 Linux 编程非常陌生 我的问题是 有没有办法以编程方式读取 Linux 中设备或分区的 UUID 是否有用于用户空间应用程序的 C C API 我发现了一些命令sudo vol id uuid dev sda1 sudo blki
  • 从两个 UUID 生成复合 UUID

    如果我有两个 UUID 是否有一种 安全 方法来生成第三个复合 UUID 这是对 独特 这个词的一些统计定义 所以我正在寻找下面的函数 f UUID generatedUUID f UUID a UUID b XOR 根据您从何处获取两个
  • 将 byte[] 或对象转换为 GUID

    我为对象数据类型分配了一些值 例如 object objData dc GetDirectoryEntry Properties objectGUID Value 该对象返回如下值 byte 16 0 145 1 104 2 117 3 1
  • UUID 作为 MySQL id 列的默认值

    我正在尝试向 MySql 8 0 17 中的现有表添加一列 该列需要包含 UUID 我正在尝试将其设置为默认值 这是我正在执行的语句 ALTER TABLE myTable ADD COLUMN UUID varchar 36 NOT NU
  • WiX - 根据环境将编译后的 web.config 复制到网站根目录

    作为 WiX 安装的一部分 我将所有转换 编译的 web config 文件复制到安装目录 编译后的 web config 的名称格式为 web ENV config 在我的安装 UI 中 我创建了一个自定义对话框 在其中解析 ENV 并填
  • 在 Swift 3 中从 UUID 获取数据

    我用 Objective C 编写了以下代码 我试图在 Swift 3 中使用它 一些等效函数似乎在 Swift 3 中不可用 下面的代码是 Objective C 中的代码 NSUUID vendorIdentifier UIDevice
  • SQL Server 2008 GUID 列全为 0

    我希望这是我做的一个简单的傻事 我的数据库中有一个表 设置如下 column name widget guid data type uniqueidentifier allow nulls false default value newid

随机推荐