UUID 生成器

生成随机 UUID(v4)标识符,可单个或批量生成。

100% 隐私安全 — 完全在您的浏览器中运行。您的数据在本地设备上处理,绝不会发送到互联网。

关于 UUID 生成器

这款免费的 UUID 生成器可创建随机的版本 4 UUID(也称为 GUID)——用于数据库、API、日志文件和分布式系统的通用唯一标识符。可以生成一个,也可以一次生成一整批,并一键复制。

它们在您的浏览器中使用 crypto.getRandomValues 生成,这与加密密钥所用的是同一个具备密码学安全性的随机源。不会向服务器请求任何内容,因此您在这里看到的每一个 UUID 都未曾在别处存在过。

什么是 UUID

UUID 是一个 128 位的数字,写作 32 个十六进制数字,分为五组并以连字符分隔:

f47ac10b-58cc-4372-a567-0e02b2c3d479

分组方式是 8-4-4-4-12,包含连字符在内总长度始终为 36 个字符。

它的意义在于无需询问任何人即可生成唯一 ID。数据库可以依次发放 1, 2, 3…,因为它是决定下一个值的唯一权威。但当两部手机在离线状态下创建记录、十二台服务器同时插入行,或者您需要在行存在*之前*就拿到 ID 时,就没有可以询问的权威了。UUID 通过足够大、足够随机来解决这个问题,随机到碰撞根本不值得去考虑。

版本 4,以及暴露它的两位数字

UUID 有若干版本。版本 4 是随机的那一种,也是几乎所有人说"UUID"时所指的版本。

您可以直接从字符串中读出版本。在 f47ac10b-58cc-4372-a567-0e02b2c3d479 中:

  • 第三组的第一位是版本——这里是 4
  • 第四组的第一位是变体——始终是 8、9、a 或 b

这两个位置是固定的,因此真正的随机性是 122 位,而不是 128 位。

您可能遇到的其他版本:v1 编码了时间戳和机器的 MAC 地址,因此可以排序,但会泄露它在何时何地生成。v7 于 2024 年标准化,是现代的答案——时间戳在前、随机部分在后,因此 ID 按创建时间排序,同时不泄露硬件信息。如果您今天做选择,而数据库排序又很重要,那么 v7 值得了解。

它们真的唯一吗?

并无保证,但数字大到荒谬的程度,以至于这并不重要。

122 位随机性提供约 5.3 × 10³⁶ 种可能取值。要让一次碰撞的概率达到 50%,您大约需要生成 2.7 × 10¹⁸ 个 UUID——也就是 270 亿亿个。

具体来说:即使每秒生成十亿个 UUID,也要大约 85 年才能让整个集合中出现一次重复的概率达到 50%。对于任何真实的应用来说,这个风险都小于存储设备悄悄损坏该值的风险。

唯一真正需要注意的是随机性的质量。来自弱随机源的 UUID 并不具备数学所承诺的那种唯一性——现实中确实出现过可预测的生成器产生重复值的缺陷。本工具使用浏览器的密码学生成器,而不是 Math.random()。

UUID 不是机密

这一点值得明说,因为人们在两个方向上都会用错。

v4 UUID 不可预测,因此把它用作难以猜到的 URL 是合理的——比如分享链接或密码重置令牌。但它并非作为安全基元设计,不带有效期,而且经常被写入日志、缓存、放进分析系统、粘贴到聊天里。请把它当作恰好难以猜测的标识符,而不是凭据。

反过来也一样:不要以为 UUID 隐藏了什么。v1 UUID 明明白白地包含时间戳和 MAC 地址。如果您从别处继承了一批 ID,而它们以版本 1 开头,那么它们正在向每一个读到它们的人透露自己在何时何地被创建。

您会在哪里用到它们

  • 数据库主键——尤其是多台机器同时创建行的时候
  • 离线优先的应用——手机可以在没有网络时创建记录,之后同步而无需重新编号
  • API 请求 ID——在日志中跨多个服务追踪同一个请求
  • 文件名与上传名——在不信任用户文件名的前提下避免冲突
  • 消息去重——作为幂等键,使重试的请求不会被处理两次
  • 分享链接——为文档或邀请提供难以猜到的 URL
  • 测试数据——绝不会与真实数据冲突的唯一值

使用方法

  • 选择需要的数量
  • 生成——新的 UUID 会出现
  • 复制——复制单个 UUID 或整个列表

需要知道的事

  • 大小写并不影响取值,但小写是惯例,也是本工具生成的形式。有些系统把 UUID 当作普通字符串比较,此时 A 和 a 是不同的——所以请保持一致。
  • 连字符只是格式。 许多系统会把这 32 位数字不带连字符地存储,或存为 16 个原始字节。值相同,只是呈现方式不同。
  • 作为数据库键是有代价的。 UUID 占 16 字节,而整数只占 4 或 8 字节;随机值会把写入分散到 B 树索引各处,而不是追加在末尾。在写入频繁的大表上,这种差异是可以测量出来的——而这正是 v7 要解决的问题。
  • 不要把它们当作密码。 它们不可预测,但它们是标识符,最终会出现在日志和浏览器历史记录中。
  • "GUID"是微软对同一事物的叫法。 在 .NET 和 SQL Server 中您会看到 GUID;它就是同一个 128 位的值。
  • nil UUID 全是零——00000000-0000-0000-0000-000000000000。它通常表示"无"或"未设置",因此值得认得出来。

常见问题

什么是 UUID,它有什么用?

UUID 是一个用 36 个字符书写的 128 位标识符,例如 f47ac10b-58cc-4372-a567-0e02b2c3d479。它的目的是让任何一方都能自行生成唯一 ID,而不必查询某个中央计数器。当记录同时在多台服务器上创建、在离线的手机上创建,或者在数据库中这一行还不存在时就需要 ID,这一点就很关键。

UUID 能保证唯一吗?

不能,但发生冲突的概率可以忽略不计。版本 4 的 UUID 有 122 位随机性,约有 5.3 × 10³⁶ 种可能。您需要生成大约 270 亿亿个,才会达到出现一次重复的 50% 概率。按每秒十亿个计算,这大致相当于 85 年。

UUID 和 GUID 有什么区别?

实际上没有区别。GUID 是微软对同一个 128 位标识符的叫法,在 .NET 和 SQL Server 中随处可见。唯一的细节是,某些微软工具会把 GUID 用花括号包起来显示,例如 {f47ac10b-...},而少数较旧的 API 在转换为原始二进制时会把部分字节的顺序排列得不同。

我该使用哪个 UUID 版本?

一般用途选版本 4——它完全随机,不会透露在何时何地生成。如果这些 ID 将作为数据库主键,可以考虑版本 7,因为它把时间戳放在前面,使得值按创建时间排序,索引效率高得多。任何对外公开的场合都请避免版本 1,因为它嵌入了 MAC 地址和时间戳。

我能把 UUID 当作安全令牌吗?

作为难以猜到的链接是可以接受的,因为 v4 UUID 在现实中无法被预测。但它是标识符而不是凭据:它永不过期,无法单独吊销,而且往往会出现在服务器日志、分析系统和浏览器历史中。真正的身份验证请使用带有效期的专用令牌。

这些 UUID 是在你们的服务器上生成的吗?

不是。它们由 crypto.getRandomValues 在您的浏览器中生成,这是每个现代浏览器都内置的具备密码学安全性的生成器。不会发出任何请求,也不会记录任何内容,因此您可以在断网状态下生成它们。

相关工具

视频教程

我们会定期添加新工具——在 YouTube 上订阅,即可在每个新工具上线时收到通知。

更多工具

查看全部

推荐应用

查看全部