UUID 生成器
随机数取自浏览器的密码学随机源,不在服务端生成、不留记录
怎么用
- 选版本:只要独一无二用
v4;要能按生成先后排序(比如做主键)用v7。 - 选数量,点「生成」——结果每行一个,「大写」「去掉连字符」勾上后会立即按新格式重排。
- 结果区右上角可一键复制全部;生成完可以顺手用哈希在线计算校验一下长度与取值。
UUID 是什么
UUID(通用唯一识别码)是一个 128 位的数字,写成文本时是 32 位十六进制、按 8-4-4-4-12 分成五组,共 36 个字符,例如 550e8400-e29b-41d4-a716-446655440000。它最常被用作数据库主键、文件名、请求追踪 ID——这些场景共同的要求是:由多台机器、多个进程各自生成,彼此不通信,也不该撞车。
它只是「实际不会重复」,不是数学上的保证。所以选版本时真正要问的是:随机性够不够、能不能排序、会不会泄露信息。
v4 与 v7 怎么选
本工具支持两个常用版本,它们的取舍很清楚:
- v4:128 位里 122 位是随机数(另外 6 位固定用来标识版本与变体)。完全没有规律,不泄露时间与机器信息,是通用场景的默认选择。代价是无序——作为数据库主键时,插入位置随机,对 B+ 树索引不友好。
- v7:前 48 位是毫秒时间戳,后面是随机数,因此按生成时间递增。同一毫秒内生成多个时不保证严格递增(RFC 允许这段时间内的位是随机的),但仍然比 v4 更适合做主键——新记录总是追加到索引尾部。
网络上更常见的 v1 本工具没有提供:它把生成机器的 MAC 地址写进 ID 里,等于把设备信息带到了数据库、日志和外链里。需要时间有序就用 v7,不必退到 v1。
为什么不用 Math.random
很多随手写的脚本用 Math.random() 拼 UUID,这是不安全的:它产生的序列是可预测的,知道前几个输出就可能推出后续值。如果这些 ID 会被用作订单号、重置令牌、文件下载地址,攻击者就能提前算出别人的 ID。本工具用的是浏览器的 crypto.getRandomValues,即操作系统提供的密码学随机源——它不依赖 HTTPS(和 crypto.subtle、crypto.randomUUID 不同),所以在普通 HTTP 页面上同样可用。
需要生成多少个才会重复
v4 有 122 位随机数,约 5.3×1036 种取值。按经典估算,要生成 2.71×1018 个才有一半概率出现碰撞——也就是每秒生成 10 亿个、连续生成 85 年以上。现实里 UUID 重复几乎总是别的原因:截断了长度、用了自研的「简化版」、或者把 ID 存在了长度不够的字段里而数据库静默截断。
36 个字符里能读出什么
拿到一个 UUID,第 13 个字符(第三组的第一个字符)就是版本号:4 是 v4、7 是 v7、1 是 v1。紧随其后的第 17 个字符是变体位,只可能是 8、9、a、b 四个之一。这两个位置是固定的,所以在做格式校验时,别把它们当成随机部分来处理。
关于数据安全
ID 全部由这个页面里的随机数生成,没有任何请求发往服务器,生成结果也不写入任何存储,刷新即消失。反过来也提醒一句:用在线工具生成生产环境的密钥类 ID 时,请先确认页面确实是本地计算的——这也是本站所有在线工具都做成纯前端的理由。
和其他工具配合
生成完通常要落到表结构或接口文档里,可以用JSON 在线工具把样例数据整理成可读结构;要核对长度或做去重统计,用正则在线测试写一条匹配规则即可。