UUID 生成器
使用浏览器加密随机源批量生成 RFC 4122 v4 UUID。
关于 UUID v4
UUID(Universally Unique Identifier;微软平台又叫 GUID)是分布式系统中常用的 128 位标识符,旨在让生成方无需协调即可保证唯一。它由 RFC 4122 标准化,规范形式是 8-4-4-4-12 共 32 位十六进制数字加横线,例如 550e8400-e29b-41d4-a716-446655440000。
v4 UUID 几乎全部由随机字节构成 —— 6 位用来标识版本(4)和变体(RFC 4122),其余 122 位都是随机的。这意味着大约要生成 2.71 quintillion 个 v4 UUID 才会有 50% 的概率发生碰撞。本工具使用 crypto.randomUUID(),底层调用操作系统的 CSPRNG,因此可用于会话 token、一次性链接等安全敏感场景。
使用场景
- 在写库前生成数据库主键。
- 为日志或调用链打 trace ID,跨服务关联事件。
- 为非幂等 HTTP 请求生成幂等 key。
- 构造无法被猜到的邀请链接或重置 token。
- 为没有天然主键的 React 列表项指定稳定 ID。
最佳实践
- 在 MySQL 用 BINARY(16)、在 PostgreSQL 用原生 UUID 类型存储,比 VARCHAR(36) 节省一半空间。
- 需要兼具唯一性和良好索引局部性时考虑 UUIDv7(带毫秒时间戳)。
- 不要在 UUID 中嵌入敏感信息,把它当作不透明值。
- 不要用 UUID 替代鉴权 —— 知道 ID 不等于有权访问对应资源。
常见问题
这些 UUID 适合作安全 token 吗?
中等强度场景适合。crypto.randomUUID() 使用操作系统的加密安全随机源。需要特别长生命周期的密钥可用更长的随机串。
碰撞概率有多大?
可以忽略。122 位随机要生成约 2.71 quintillion 个才会有 50% 的概率出现碰撞。
为什么是 v4?
v4 完全随机,无需协调、无需 MAC 地址、无需时钟。这是大多数现代库的默认。
v4 与 v7 有什么区别?
v7 在高位嵌入毫秒时间戳,因此可按时间排序、对数据库索引更友好。v4 完全随机,不含时间信息。