什么是 UUID?
UUID(通用唯一识别码,微软的工具称为 GUID)是一个 128 位的 ID,写成 32 个十六进制数字、分成五段,例如 919108f7-52d1-4320-9bac-f847db4148a8。任何程序都能自己生成,不需要向中央服务器申请,随机生成的两个 UUID 实际上不会重复。
v4 还是 v7?
- v4 有 122 位是随机的。适合不想透露任何信息的 ID,例如公开的 ID、文件名、邀请码。
- v7 开头是毫秒时间戳,越新生成的排得越靠后。用作数据库主键时,新数据都追加在索引末尾,比随机的 v4 更快。
使用方法
- 选择版本与数量(最多 1,000 个)。
- 如果系统需要特定格式,可以改成大写、去掉连字符或加上大括号,列表会立即更新。
- 复制列表,或下载为文本文件(一行一个)。
- 要检查现有的 UUID,粘贴到“校验 UUID”,就会显示版本、变体;v1、v6、v7 还会显示其中记录的时间。
示例
这个 v7 UUID 出自 UUID 的标准文档 RFC 9562:
017f22e2-79b0-7cc3-98c4-dc0c0c07398f
前 12 个数字 017f22e279b0 是以毫秒为单位的 Unix 时间戳,校验结果显示为:
2022-02-22T19:22:22.000Z
常见问题
这里生成的 UUID 够随机吗?能用在生产环境吗?
可以。随机部分来自浏览器的 crypto.getRandomValues,是密码学安全的随机数,与服务器端库的质量相同。UUID 在你的浏览器中生成,不会发送到任何地方。
两个 UUID 会不会重复?
理论上会,实际上不会。v4 有 2122 种可能:每秒生成 10 亿个、连续 85 年,出现一次重复的概率才到 50%。v7 还包含时间,不同毫秒生成的 ID 绝不会重复。
v7 会暴露生成时间吗?
会。任何人都能从 v7 UUID 读出生成时间,就像上面的示例。如果生成时间不能公开,请使用 v4。
用大写还是小写?
标准建议输出小写、比较时不区分大小写,所以小写最稳妥。只有系统要求时才用大写或大括号,例如部分微软工具会把 GUID 显示为 {...}。