UUID 生成器
开发使用 crypto.randomUUID 生成密码学安全的随机 UUID(RFC 4122 v4)。
本页内容
什么是 UUID?#
UUID(通用唯一识别码,微软体系里也叫 GUID)是一个 128 位的标识符,渲染成 32 个十六进制字符、按 8-4-4-4-12 分组,例如 c9bf1d4d-7d4f-4b3a-8b2c-1e5f6a7b8c9d。它的思路简单却很有力:按需生成标识符,不需要中心授权方,不需要多台机器之间互相协调,而两个标识符撞车的概率依然接近于零。正是这个性质,让 UUID 成了分布式数据库默认的主键策略、几乎每个 JSON API 资源上的 id 字段、把多条日志跨服务串起来的关联 ID(correlation ID),以及上传文件的命名。
本页生成的是 RFC 4122 版本 4(v4) UUID——由随机位构成的那个变体。绝大多数现代场景下你想要的就是 v4:它不携带机器 MAC 地址(不像 v1),不嵌入命名空间层级(不像 v3/v5),唯一性完全靠密码学随机数保证。你可以一次性生成单个或最多 10000 个,小写或大写,全部在浏览器本地完成。
32 个十六进制字符里有两位其实不是随机的——它们声明了 UUID 自身的类型。位置 14(第三组第一个字符)的版本位永远是 4,位置 19(第四组第一个字符)的变体位永远是 8、9、a 或 b。这就是为什么你在本页看到的每一个值都长成 xxxxxxxx-xxxx-4xxx-[89ab]xxx-xxxxxxxxxxxx。这两个固定位置同时是一枚”自描述”指纹:任何匹配这个形状的字符串都是 v4 UUID,一条简单的正则就能批量校验上百万个。
如何使用#
- 把顶部的 Count(数量)数字框设成你想要生成的 UUID 个数——范围是 1 到 10000,超出会被自动夹断。
- 勾选 Uppercase(大写)如果你需要全大写输出(某些遗留系统和微软 GUID 习惯用
C9BF1D4D-…)。不勾则默认小写,这也是大多数现代技术栈的写法。 - 点击 Generate(生成)。值会逐行出现在等宽输出区,每行一个。
- 点击 Copy(复制)把整批结果复制到剪贴板,直接粘进 SQL
INSERT、CSV、测试夹具或种子脚本。 - 需要新的一批时随时再点 Generate——每次点击都重新抽取随机位,产生的是从未存在过的全新值。
主要特性#
- 真正的密码学随机。 安全上下文下走浏览器原生
crypto.randomUUID(),并有crypto.getRandomValues兜底方案、对版本位和变体位做拒绝采样——而不是Math.random(),后者根本不适合用来生成标识符。 - 批量生成。 一次点击最多 10000 个,逐行输出,免得你自己写脚本灌库或做夹具。
- 小写或大写。 一个开关覆盖两种约定。
- 符合 RFC 4122 v4。 版本位恒为
4、变体位恒为8/9/a/b,每个值都能通过标准 v4 正则校验。 - 100% 客户端运行。 没有后端,没有埋点。你在这里生成的 UUID 不会被记录到任何地方——值一出现就只属于你。
实战示例#
保持 Count 默认值 5、Uppercase 不勾,点击 Generate,会得到五行类似下面的结果(你实际看到的会不同,因为是随机的):
7f3a9c2e-1b4d-4e8f-a6c3-9d2b8e1f0a47
2c8d4f1a-9e3b-47a2-8c6d-1f5e9a0b3c28
a1b2c3d4-e5f6-4789-abcd-ef0123456789
9e8d7c6b-5a4f-3210-ba98-76543210fedc
4f3e2d1c-0b9a-8765-4321-fedcba987654
仔细看任意一行的第三组:总是以 4 开头。再看第四组:总是以 8、9、a 或 b 开头。这两个字符不是随机出来的——它们就是版本和变体标记,也是为什么一行校验器就能确认某字符串是不是货真价实的 v4 UUID。
如果你勾上 Uppercase 再生成一次,同样的形状会以大写形式出现,例如 7F3A9C2E-1B4D-4E8F-A6C3-9D2B8E1F0A47——位完全等价,只是按某些系统偏好的大写 GUID 渲染。
常见问题#
v4 UUID 到底有多唯一?真的不会撞车吗?#
这个数字大得离谱。单个 v4 UUID 有 122 位真正的随机性(128 位减去 4 位版本位和 2 位变体位)。想要哪怕 50% 的概率出现一次碰撞,你需要生成大约 2.71 × 10^36 个 UUID——相当于每秒生成十亿亿亿个,持续比宇宙年龄还久。对任何现实的数据库或系统而言,碰撞都可以视为不可能,根本不需要去查重。
把这些 UUID 当数据库主键用靠谱吗?#
靠谱——v4 之所以是这方面最常见的选型,正是因为它不需要协调。唯一的提醒是索引碎片化:纯随机的主键会散落在 B 树各处,所以在写入极高的 PostgreSQL/MySQL 表上,你可能更想要 UUIDv7(按时间排序)那种变体。对应用层面的资源 ID、关联 ID 和绝大多数表来说,普通 v4 已经足够。
为什么不直接用 Math.random() 拼 UUID?#
因为 Math.random() 不是密码学安全的——它的输出可预测到这种程度:攻击者只要观察到几个 ID,就有可能猜出其他 ID。本页特意使用 crypto.randomUUID()(并有 crypto.getRandomValues 兜底、正确处理版本位和变体位),它从操作系统的 CSPRNG 抽取随机数。只要这个标识符关联的是用户、会话或资源,这个区别就不能含糊。
这里能生成版本 1、版本 5 或命名 UUID 吗?#
不能——本页有意只做 v4,因为 v4 覆盖了绝大多数真实场景,而且除了随机源之外不需要任何输入。如果你需要基于名称的 v5(由名称加命名空间确定性派生),那是另一种计算,应该放在你的应用代码或专门的工具里。