UUID 生成器

使用浏览器内置的加密随机数生成器生成随机 UUID v4 标识符。一次生成一个或上百个,不会向任何地方发送任何内容。

大写
去除连字符

什么是 UUID v4?

128 位随机数,格式化为标准标识符。

UUID v4 由 122 个随机比特组成(另外 6 位固定用于标记版本和变体),能产生约 5.3 万亿的万亿的万亿种可能值。冲突的概率极低,对于数据库主键、请求 ID 或文件名来说,实际上不构成问题。

常见用途

不泄露行数的数据库主键、API 请求的幂等键、用于跨服务追踪日志的关联 ID,以及即使在不同机器上同时生成也不会冲突的唯一文件名或会话名。

工作原理

每个 ID 都来自浏览器内置的生成器 crypto.randomUUID()。其底层从操作系统的加密安全随机源(与生成 TLS 密钥的来源相同)中提取 128 位,然后将其中 6 位固定为特定值:版本半字节被设为 4,变体位被设为 10。这就是为什么这里的每个 UUID 第三组开头都是 4,第四组开头都是 8、9、a 或 b。剩下的 122 位是纯随机的,这正是冲突在实践中几乎不成问题的原因。

到底有多不成问题?一共有 2^122 种可能的 v4 UUID,约 5.3 万亿的万亿的万亿种。根据生日问题的数学原理,大约需要生成 103 万亿个 UUID,出现哪怕一次冲突的概率才会达到百万分之一。你的系统所生成的每一个 ID,相对这个数字而言都只是舍入误差,这也是为什么 v4 UUID 可以在任何机器上无需协调地安全生成。

生成过程只是一次浏览器 API 调用,因此不会向服务器请求任何内容,也不会发送任何内容:打开开发者工具的网络面板,点击「生成」,你会看到什么都没发生。大写和去连字符开关只是对已生成的 ID 重新格式化;底层的值并不会改变。

一个实用提示:v4 UUID 是刻意无序的,因此作为数据库主键时会使插入操作分散到索引各处。如果你需要按创建时间排序的 ID,可以了解一下 UUID v7,它把时间戳放在高位比特中。至于其他场景(请求 ID、文件名、关联令牌),随机的 v4 正合适。