UUID生成器
生成随机的版本4 UUID,每次1到100个,并以列表形式复制。它们来自浏览器的加密安全随机数生成器;粘贴任意UUID,检测工具会告诉您它的版本和变体。
0 个字符 · 0 个词 · 0 行
完全在当前浏览器标签页中运行,您的文本不会被上传或保存。
UUID 版本
版本是第三组的第一个数字;变体编码在第四组的第一个数字中(RFC UUID 为 8、9、a 或 b)。示例来自 RFC 9562 的测试向量。
| 版本 | 生成依据 | 示例 |
|---|---|---|
| v1 | 公历时间戳 + 节点(MAC)ID | c232ab00-9414-11ec-b3c8-9f6bdeced846 |
| v3 | 命名空间 + 名称的 MD5 哈希 | 5df41881-3aed-3515-88a7-2f4a814cf09e |
| v4 | 122 位随机数 | 919108f7-52d1-4320-9bac-f847db4148a8 |
| v5 | 命名空间 + 名称的 SHA-1 哈希 | 2ed6657d-e927-568b-95e1-2665a8aea6a2 |
| v6 | 重新排列 v1 时间戳,使 ID 按时间排序 | 1ec9414c-232a-6b00-b3c8-9f6bdeced846 |
| v7 | Unix 毫秒时间 + 随机位,可排序 | 017f22e2-79b0-7cc3-98c4-dc0c0c07398f |
| v8 | 由应用自定义的布局 | 2489e9ad-2ee2-8e00-8ec9-32d5f69181c0 |
什么是UUID,如何读懂它
UUID(通用唯一标识符,在微软软件中称为 GUID)是一个 128 位的数字,写成 32 个十六进制数字,按 8-4-4-4-12 分组,例如 f47ac10b-58cc-4372-a567-0e02b2c3d479。它于 2005 年在 RFC 4122 中标准化;2024 年 5 月该文档被 RFC 9562 取代,后者保留了原有版本,并新增了三个版本。其中有两个位置是固定的:第三组的第一个数字是版本(4372 中的 4),第四组的第一个数字表示变体,所有遵循 RFC 的 UUID 此处都是 8、9、a 或 b。
版本 4 用随机数据填充其余 122 位。这个空间极其庞大,要生成约 2.7 百亿亿(2.7 × 10¹⁸)个 UUID,才有 50% 的概率出现一次重复,因此各系统可以在多台机器上各自独立生成 v4 ID,无需相互协调。本页使用 crypto.randomUUID;若浏览器不支持,则使用 crypto.getRandomValues,绝不使用 Math.random,因为它的输出并非为不可预测而设计。大写和去除连字符选项只改变格式,值本身不变,大多数解析器两种写法都能接受。
v4、v7及其他版本
版本 1 和 6 由时间戳和节点 ID 构成,节点 ID 最初是计算机的 MAC 地址,会泄露 ID 是在哪里、何时生成的。版本 3 和 5 用 MD5 或 SHA-1 对命名空间和名称做哈希,因此相同的输入总是得到相同的 UUID。版本 8 是留给自定义方案的自由格式。最值得关注的新版本是版本 7:它以 48 位的毫秒级 Unix 时间戳开头,其余位用随机数填充,因此 ID 可以按创建时间排序。
这种有序性正是数据库主键考虑使用 v7 的原因。随机的 v4 主键会散落在 B 树索引的各个位置,随着表增大会造成页分裂并降低缓存局部性;而 v7 主键大致按递增顺序产生,类似自增列,却仍然无需中央计数器即可生成。希望 ID 不泄露任何信息(包括创建时间)时选 v4;看重插入性能和时间顺序时选 v7。UUID 只是标识符,不是机密:密码和 API 密钥请使用专门的密码生成器。更多编码和检查工具见开发者工具。
常见问题
- 两个随机生成的UUID会重复吗?
- 理论上会,实际上不会。有 122 位随机数时,即使每秒生成十亿个 v4 UUID,持续约 86 年,出现一次碰撞的概率也只有约 50%,前提是随机源可靠。
- UUID和GUID有什么区别?
- 本质上没有区别。GUID 是微软对同一种 128 位标识符的称呼。一些微软工具会以大写或花括号包裹的形式显示 GUID,这里的检查器同样可以识别。
- 如何判断UUID是哪个版本?
- 看第三组的第一个数字:4 表示随机,7 表示按时间排序,1 表示时间戳加节点。把它粘贴到“检查 UUID”中即可查看版本和变体。
- 数据库主键应该用UUIDv7而不是v4吗?
- 通常可以。v7 主键按时间排序,能让 B 树索引保持紧凑、插入速度更快。如果 v7 ID 中包含的创建时间需要保密,就继续使用 v4。
- 用UUID作为密码重置令牌安全吗?
- 来自安全生成器的 v4 UUID 有 122 位随机数,足以做到无法猜测,但许多库提供了带明确过期时间的专用令牌函数。切勿把 v1 或 v7 这类基于时间的版本当作机密使用。