UUID 生成器

在线生成随机 UUID(GUID)。可批量生成 UUID v4 或按时间排序的 UUID v7,支持大写或去掉连字符。

如何生成 UUID

  1. 选择 v4(随机)或 v7(按时间排序)。
  2. 设置数量,每批可生成 1 到 1,000 个。
  3. 选择格式:大写;去掉连字符,得到紧凑的 32 位字符串;或加上花括号 { },即 Windows 注册表文件和部分 .NET 代码使用的样式。这些选项可以组合使用。
  4. 点击复制把整个列表放到剪贴板,或点击下载 .txt保存为每行一个 UUID 的文件。点击生成会得到新的一批。

更改任何选项都会生成新的一批,而不是重新排版当前列表。所以切换格式之前,请先复制你需要的列表。

UUID 的结构

UUID(universally unique identifier,通用唯一识别码)是一个 128 位的数,通常写成 32 个十六进制数字,分为 8-4-4-4-12 五组。其中两个位置承载固定信息:第三组的第一位是版本,第四组的第一位是变体。在 RFC 9562(2024 年取代 RFC 4122 的标准)定义的各个标准版本中,变体位总是 8、9、a 或 b。

版本示例各位的内容
v43f2c8e91-6b0d-4a57-9c1e-27d4f08b6a3e122 个随机位
v7019b76da-a800-7a3c-9f12-5c0e8b4d71e648 位毫秒级 Unix 时间,之后是 74 位计数器和随机数据

选 v4 还是 v7?

版本 4 就是大家熟悉的随机 UUID,也是大多数库默认生成的类型,例如 JavaScript 的 crypto.randomUUID() 或 Python 的 uuid.uuid4()。当 ID 不应透露任何信息、顺序也无关紧要时使用它:出现在 URL 中的公开 ID、文件名、日志中的关联 ID。

版本 7 以时间戳开头,因此后生成的 ID 排在先生成的 ID 之后,无论按文本还是按字节比较都是如此。这对数据库主键很重要:把随机的 v4 键插入 B 树索引,写入会分散到整个索引;而 v7 键按顺序到达、追加在末尾附近,索引保持紧凑,插入也更快。在同一毫秒内,本生成器使用一个 12 位计数器(起始值随机),因此一次生成 1,000 个 v7 UUID 仍然严格递增。

示例:读出 v7 UUID 中的时间

以 019b76da-a800-7a3c-9f12-5c0e8b4d71e6 为例。它的前 12 个十六进制数字 019b76daa800 就是生成时间。把它粘贴到进制转换器的十六进制框中,得到 1767225600000;再把这个值放进 Unix 时间戳转换,结果是 2026 年 1 月 1 日 00:00:00.000 UTC(北京时间上午 8 点)。用同样的方法可以知道一条记录是何时创建的——这也正是在创建时间需要保密的场合不应使用 v7 ID 的原因。

“唯一”到什么程度?

v4 UUID 共有 2¹²² 种可能的取值,约 5.3 × 10³⁶。根据生日悖论,大约要生成 2.7 × 10¹⁸ 个,出现哪怕一次重复的概率才会达到 50%。一个生成了一万亿个 v4 UUID 的系统,其中任意两个相同的概率约为十万亿分之一。前提是随机源质量良好;本页使用浏览器的密码学安全随机数生成器 crypto.getRandomValues。实际中出现的重复来自程序错误——复制的种子、重复使用的列表、遗留在生产环境中的模拟生成器——而不是来自偶然。

其他版本简介

  • v1 和 v6 由时间戳和节点标识符组成,节点标识符过去是网卡的 MAC 地址。v6 重新排列了 v1 的字段,使其按时间排序;不过 RFC 9562 建议新系统改用 v7。
  • v3 和 v5 不是随机的:它们分别用 MD5 和 SHA-1 对命名空间和名称做哈希,所以相同的名称总是得到相同的 UUID。
  • v8 用于承载厂商自定义的格式。
  • nil UUID 全部为零,即 00000000-0000-0000-0000-000000000000,常用来表示“无值”。

实用建议

  • 如果数据库支持,请用原生的 uuid 列或 16 字节二进制来存储 UUID,而不是 36 个字符的字符串。比较更快,索引也更小。
  • 比较 UUID 时不要区分大小写。标准使用小写,微软的工具常用大写,两者表示同一个值。
  • 去掉连字符的 UUID 仍是同一个数。如果某个系统拒绝你的值,先检查它是否要求连字符或花括号,再怀疑 ID 本身。

常见问题

GUID 和 UUID 是一回事吗?

是的。GUID 是微软对同一种 128 位格式的叫法,通常写成花括号内的大写形式:{3F2C8E91-6B0D-4A57-9C1E-27D4F08B6A3E}。同时勾选“大写”和“花括号”即可得到这种样式。

可以把 UUID 当作密码或秘密令牌吗?

最好不要。v4 UUID 虽然难以猜测,但它的设计用途是标识符,很多系统会把 ID 原样写进日志和 URL。v7 UUID 的随机位更少,还会暴露生成时间。秘密值请使用专门为此生成的随机令牌。

不同服务器生成的 v7 UUID 也能保证顺序吗?

只能保证到各服务器时钟一致的程度。在同一个生成器内部顺序是精确的;跨服务器时,同一毫秒内生成的 ID 或存在时钟偏差时,顺序可能交错。

为什么这里的每个 UUID 在第二个连字符后面都是 4 或 7?

那一位是版本字段,第三个连字符后的第一位是变体字段。两者都由标准固定,所以 v4 UUID 的随机位是 122 个而不是 128 个。它们只说明 ID 是怎样生成的,无法证明生成器的随机性是否可靠。