UUID 生成器
生成符合 RFC 4122 标准的唯一标识符
点击「生成 UUID」按钮开始生成
什么是 UUID?
UUID 是 Universally Unique Identifier 的缩写,表示一种 128 位标识符,用于在分布式系统中标记记录、对象、会话、文件、设备、消息等实体。常见文本形式由 8-4-4-4-12 的十六进制分组组成。它的价值在于多个服务器、客户端或服务可以各自生成 ID,而不必向中心数据库申请下一个连续编号。不同 UUID 版本可能基于随机数、时间信息或命名空间哈希生成,因此在隐私、排序、可预测性和碰撞风险上有所差异。UUID 只是标识符,不能当作权限凭证或秘密令牌使用。
如何使用
生成步骤
- 选择 UUID 版本(v1、v4 或 Nil)
- 设置生成数量(1-100)
- 选择输出大小写(大写或小写)
- 选择格式(带连字符、无连字符或带花括号)
- 点击生成按钮创建所需的标识符
键盘快捷键
- Ctrl + G生成 UUID
- Ctrl + Shift + C全部复制
标识符说明
- UUID v4 通常是随机客户端标识符的合适选择;它不编码时间或设备信息。
- 不要将 UUID 用作密钥。它们用于标识记录,但不能替代认证令牌或访问密钥。
使用场景
技术原理
UUID 是标准格式为 8-4-4-4-12 的 128 位标识符,共 36 个字符(含 4 个连字符)。128 位分为:time-low(32 位)、time-mid(16 位)、version-and-time-high(16 位,高 4 位为版本号)、variant-and-clock-seq(16 位,高 2 到 3 位为变体)和 node(48 位)。RFC 4122 定义了 v1 到 v5 五个版本。 v1 由 60 位时间戳(100 纳秒精度,从 1582 年 10 月 15 日起计)加 48 位 MAC 地址加 14 位时钟序列构成。理论上可按生成时间排序,但会泄露机器身份和生成时间。v4 是使用最广泛的版本:122 位由加密安全随机源填充,并固定 version(4)和 variant(10)位。 碰撞概率是 UUID 设计中的核心考量。v4 拥有 122 位随机空间,根据生日悖论,每秒生成十亿个 UUID 连续运行 85 年才能达到 50% 的单次碰撞概率,在实际应用中绰绰有余。新兴的 v7 将时间戳放在前面、随机位放在后面,兼顾唯一性和时间排序,更适合用作数据库主键。
- UUID v4:122 位随机,固定 version 位为 4、variant 位为 10;适用于几乎所有场景,不泄露隐私信息
- UUID v1:60 位时间戳 + 48 位 MAC + 14 位时钟序列;可按时间排序但暴露机器指纹,需谨慎使用
- UUID v7:时间戳在前、随机位在后;2024 年草案标准,专为数据库主键设计
- 碰撞概率:v4 的随机空间为 2^122,每秒十亿个 UUID 连续运行 85 年才能达到 50% 的单次碰撞概率
- Nil UUID:全零 00000000-0000-0000-0000-000000000000,常用作占位符或默认值
- 格式变体:除标准 8-4-4-4-12 外,还有 32 字符无连字符形式、{花括号} 形式和 URN 形式(urn:uuid:...)
示例
UUID v4(随机)标准格式
550e8400-e29b-41d4-a716-446655440000
版本位(第 13 位十六进制字符): 4 -> v4,随机
变体位(第 17 位十六进制字符): 8/9/a/b -> RFC 4122 变体
用途: 数据库主键、请求 ID、资源 ID —— 不在乎顺序时的默认选择
RFC: RFC 4122 第 4.4 节定义了 v4 的生成方式UUID v1(时间戳 + MAC)格式
c232ab00-9414-11ec-b909-0242ac120002
版本位: 1 -> v1,基于时间
说明: 在 time_low 中编码了生成时间戳;最后 12 位十六进制字符是节点 ID(通常是 MAC 地址)
用途: 需要可排序 ID 或确定的主机来源时使用,但要注意 MAC 会泄露主机身份
RFC: RFC 4122 第 4.1 节定义了 v1 的布局批量生成 5 个 v4 ID
a1b2c3d4-e5f6-4789-a012-3456789abcde
f7e8d9c0-b1a2-43f4-95e6-7d8c9b0a1e2f
3c4d5e6f-7a8b-49c0-9d1e-2f3a4b5c6d7e
8e9f0a1b-2c3d-44e5-bf6a-7b8c9d0e1f2a
5f6a7b8c-9d0e-45f1-a2b3-c4d5e6f7a8b9
说明:每个 ID 都独立来自 crypto.getRandomValues;按照 RFC 4122 附录 B,2^122 个 ID 的碰撞概率可以忽略不计常见问题
什么是 UUID?
通用唯一标识符是一个 128 位的值(RFC 4122/9562),通常以 32 位十六进制按 8-4-4-4-12 的形式书写,例如 550e8400-e29b-41d4-a716-446655440000。不同版本编码的内容不同(时间、随机数据或哈希),目的都是无需中央协调就能在跨系统间保持唯一。
UUID v1、v4 和 v7 有什么区别?
v1 混合了主机 MAC 地址和 100 ns 级时间戳(有序但泄露主机信息);v4 完全随机(122 位熵,不可排序);v7(RFC 9562)把 48 位 Unix 毫秒时间戳放在高位,低位为随机数——既像 v1 那样可排序,又不会泄露 MAC。v7 是现代数据库主键的默认选择。
UUID 真的是唯一的吗?
在统计意义上是的。即便每秒生成十亿个 v4 UUID,连续生成 100 年,发生碰撞的概率也仅约 50%(生日悖论上界)。在所有实际系统中,都可以把 UUID 视为无需协调即可唯一。
UUID 是随机且不可猜测的吗?
v4 UUID 是随机的,实际上不可猜测(122 位熵)。v1 UUID 完全不是随机的——它会暴露主机的 MAC 和时间戳,因此不要用 v1 做安全令牌。v7 的时间戳前缀同样可预测,只有尾部的随机位是不可猜测的。
应该用 UUID 作为数据库主键吗?
可以,但有取舍。在按主键聚簇的数据库(如 MySQL InnoDB)中,随机的 v4 UUID 会引起 B 树碎片化,规模上去后会拖慢插入。可排序的 v7 UUID 能避免这个问题。自增整数仍然更小、更快——只有在分布式生成场景下才更需要 UUID。
UUID 是在浏览器里生成的吗?
是的。页面使用的是 Web Crypto API 中的 crypto.randomUUID(旧版浏览器回退到 crypto.getRandomValues),不会向服务器发送任何内容;刷新页面就会得到一段全新的熵流。
为什么有些 UUID 开头几乎一样?
v1 和 v7 的 UUID 在前缀中编码了时间,所以同一毫秒内生成的 UUID 会共享前缀,只有尾部字节不同。正是这种特性让它们天然可排序。v4 UUID 是随机的,不会出现这种现象。