UUID 在线生成与校验
批量生成 UUID v4,支持大写与去连字符,并校验已有 UUID 的合法性、识别版本与 v1 时间戳。
造测试数据、给订单或文件生成不冲突的标识、排查线上 ID 为什么带着时间信息,都会用到 UUID。手工一个个敲不现实,从别处复制来的字符串又不知道是哪个版本、格式是否合法,有没有去掉连字符也无法一眼判断。
生成使用浏览器内置的 crypto.getRandomValues 取密码学安全随机数,一次最多 100 个,可切换大写与去掉连字符,支持单个复制与全部复制。校验功能会检查长度、连字符位置、十六进制字符与版本号是否自洽,并识别 v1/v3/v4/v5,对 v1 还能解析出记录的时间戳,这些都在本地完成。
UUID 各版本的区别与用途
v4 使用 122 位随机数,除版本位与变体位外全部随机,是日常生成 ID 的首选;v3 与 v5 是对「命名空间 + 名称」分别做 MD5、SHA-1 得到的确定性结果,同样的输入永远得到同一个 UUID,适合给 URL、域名生成稳定标识;v1 由 60 位时间戳、时钟序列和节点号(通常是网卡 MAC)拼成,能保证趋势递增,但会把生成时间和机器信息一并暴露出去。
v1 的时间戳为什么能还原出来
v1 的时间戳以 100 纳秒为单位,共 60 位,起点是 1582 年 10 月 15 日(格里高利历改革日),并且比特顺序被拆成三段存储。还原方法是把它减去固定偏移量,再除以 10 的 7 次方得到 Unix 时间戳(秒)。这意味着对外暴露 v1 UUID 相当于公开了「这台机器在什么时刻做了什么」,做用户可见的 ID 时应优先选 v4 或 v5。
随机数来源与批量生成的注意点
本工具用浏览器的 crypto.getRandomValues 取密码学安全随机数,而不是 Math.random——后者的输出可被预测,用来生成标识时存在被猜中的风险。批量生成适合造测试数据、压测或初始化数据库,可配合大写与去连字符选项匹配目标系统的格式要求。要强调的是 UUID 的设计目标是不冲突,不是不可猜,把它当邀请码或重置令牌使用时仍需加签名、限流与服务端校验。
常见问题
- UUID v4 会重复吗?
- 理论上可能,但概率极低:v4 有 122 位随机位,约 5.3×10 的 36 次方种取值,生成十亿个才出现一次碰撞的概率也在极低量级。实际系统里更常见的问题是业务层没建唯一索引,而不是 UUID 本身撞了。
- UUID 和 GUID 有什么区别?
- 没有实质区别。GUID 是微软体系里的叫法,UUID 是 RFC 4122/9562 的标准术语,生成规则与格式一致,都是 32 个十六进制字符加 4 个连字符。跨平台交互时按 UUID 的规范解析即可。
- v3 和 v5 每次生成的结果为什么都一样?
- 因为它们是确定性算法:对命名空间 UUID 与名称字符串做 MD5(v3)或 SHA-1(v5),再取固定长度作为结果,输入不变结果就不会变。这正是它们适合生成稳定标识的原因,反过来也不该用它们做随机令牌。
- 去掉连字符的 UUID 还合法吗?
- 去掉连字符后仍是有效的 128 位标识,很多数据库和日志里就这么存,但严格来说已经不是标准书写形式。RFC 规定的是 8-4-4-4-12 的分组写法,对外交换数据时建议保留连字符,避免解析库报错。