简体中文

开发者工具 · UUID 生成器

UUID 版本 1 到 8 说明:您应该生成哪一个?

· 背景

uuid 密码学 浏览器 API

八个版本选项及其用例排列:基于时间、基于名称、随机和自定义布局
原始 ToolAcre 矢量图

八个版本共享一种格式,但解决不同的问题:时间顺序、再现性、随机性或自定义布局。这篇文章解释了每一个并给出了决策路径。

一种格式,八种配方 - 为什么版本半字节在您选择库函数时很重要

UUID 标准将 128 位格式定义为带有连字符的 36 个十六进制字符。 RFC 9562 定义了八种不同的配方(版本一到版本八),用于用不同的模式和含义填充这些位。版本半字节(第三组的第一个字符)标识生成该值的方法,用作标签。选择错误的版本意味着存储不必要的时间信息、缺少数据库性能的排序保证或误解标识符安全角色。这篇文章将介绍每个版本、它解决的具体问题、开发人员在实践中遇到的问题,并提供一个决策框架,用于根据您的特定系统需求选择正确的版本。

v1 和 v6:时间加节点 — 原始的基于时间的布局和正确排序的重新排序版本

版本 1 将 60 位时间戳与节点标识符(最初是 MAC 地址,尽管现代实现使用随机值以避免泄漏硬件信息)相结合。时间戳记录自 10 月 15、1582 以来的 100 纳秒间隔。节点字段可以揭示标识符的生成时间及其地理来源,这就是现代实现避免 MAC 地址的原因。版本 6 重新排列相同的时间戳和节点信息,通过将高阶时间位移到前面来提高可排序性,使 v6 UUID 按字典顺序正确排序。如果您的应用程序需要能够按创建时间自然排序并具有卓越索引局部性的 UUID,那么 v6 是现代选择。

v2:DCE 安全性 — 很少使用的嵌入 POSIX 标识符的变体

版本 2 在新系统中很少使用。它将 POSIX 用户或组标识符嵌入到 UUID 布局中,使其仅在这些标识符具有组织含义的遗留环境中有用。 v2 设计采用了现代分布式系统中不常见的特定计算模型(DCE 安全性)。大多数组织通过数据库联接或查找表将 UUID 与其应用程序层中的用户或组关联起来,而不是通过将用户 ID 编码到标识符本身中。这种关注点分离使得更改授权模型、迁移用户数据和维护审计跟踪变得更加容易。将凭证直接编码到 UUID 中会产生紧密耦合,并使系统更难发展。

v3 和 v5:基于名称 — 从命名空间和具有 MD5 或 SHA-1 的名称散列的确定性 ID

版本 3 和 5 UUID 是确定性的:相同的命名空间和名称始终生成相同的标识符,非常适合表示来自外部数据的稳定映射。版本 3 使用 MD5,版本 5 使用 SHA-1 作为哈希算法,反映了它们各自的年龄和采用情况。当客户记录到达导入时,从固定命名空间派生的 v5 UUID 在多次导入运行中将是相同的,从而防止重复记录。这种确定性意味着 UUID 对于任何知道命名空间和输入的人来说都是可重现和可预测的。实用价值在数据集成场景中凸显:协调来自多个系统的客户记录、防止重复导入以及为项目分配稳定的 ID。

v4:随机 — CSPRNG 中的 122 位以及订购时的默认选择并不重要

版本 4 是默认选择。 v4 UUID 由来自加密安全随机源的 122 位组成,其中六个位设置为固定值(版本半字节 4 和 RFC 9562 变体位 10)。随机性就是重点:每次调用都会产生不同的值,碰撞几乎不可能发生,并且不需要外部状态或协调。它是 ToolAcre 使用 crypto.randomUUID() 或 crypto.getRandomValues() 生成的版本。此版本适用于对象引用、非结构化数据以及主键或排序上下文之外的大多数角色。

v7 和 v8:Unix 时间和自定义 — 数据库密钥的现代时间排序版本和定制布局的逃生舱口

版本 7,在 RFC 9562 中标准化,将现代时间排序属性引入 UUID 格式。它使用 48 位 Unix 毫秒时间戳、12 位亚毫秒精度以及 62 随机位组合。 Unix 毫秒时间戳在 10889 年之前有效,使其适合系统。结果按字典顺序正确排序,并适合标准 128 位 UUID 列,无需特殊处理或编码转换。如果您的应用程序需要按照标准 UUID 格式按创建时间排序的标识符,则 v7 是当前的最佳实践。版本 8 是实现定义格式的标准化包罗万象,仅当您需要 v1-v7 未涵盖的特定位布局时才有用。

工作示例 — 应用于三种场景的决策路径:公共 API 引用、主键和导入记录的稳定 ID

三个现实场景说明了版本选择:首先,公共 API 引用必须在 API 实例之间保持稳定,不得泄漏创建时间,并且在服务器重新启动时必须相同,以便不同实例为同一文档生成相同的引用。使用具有稳定命名空间和文档名称的 v5。其次,持续增长的表的主键需要是唯一的,不应导致索引碎片,并且必须可由任何应用程序实例生成,无需中央协调。使用 v7 进行可排序标识符和标准 UUID 生态系统支持。第三,需要稳定查找的归档记录需要不可变的标识符。

要点:按属性选择,而不是按习惯 - ToolAcre 生成器从浏览器的 CSPRNG 中为需要 v4 的情况生成随机 UUID

版本选择遵循您的模式设计和系统要求,而不是惯例或熟悉程度。随机 UUID (v4) 是默认值,因为它们不需要状态或协调,并生成适合大多数角色的独立标识符。时间排序版本(v6、v7)以时间信息泄漏或时钟同步要求为代价解决了索引局部性问题。确定性版本(v3、v5)可防止重复导入并实现稳定的外部映射,但代价是可预测性 - 任何知道您的命名空间的人都可以重新计算它们。 ToolAcre 从浏览器的加密安全生成器生成随机 v4 UUID。当您需要不同的版本时,格式正确的检查会确认标识符解析是否有效。