生成 UUID v1 / v4 / v5,支持批量
UUID(Universally Unique Identifier)是一种 128 位的标识符,用于在分布式系统中生成全局唯一的 ID,无需中央协调服务器。标准格式为 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx(36 字符含连字符)。UUID 广泛应用于数据库主键、消息队列、微服务间通信等场景。
| 版本 | 生成依据 | 特点 |
|---|---|---|
| v1 | 时间戳 + MAC 地址 | 可排序,但暴露设备信息 |
| v4 | 完全随机 | 最常用,122 个随机位 |
| v5 | 命名空间 + SHA-1 | 相同输入产生相同 UUID |
| v7 | 时间戳前缀 + 随机 | 可按时间排序(RFC 9562,2024) |
碰撞概率:v4 需生成约 10¹⁸ 个才有 50% 碰撞概率,工程上可忽略。
需要按时间排序的场景推荐 UUID v7 或 ULID(26 字符,时间前缀,支持字典序)。
理论上存在碰撞概率,但实际可忽略。每秒生成 10 亿个 UUID v4,需要连续生成约 85 年才有 50% 的概率出现一次碰撞。对于绝大多数应用场景,可以认为是唯一的。
UUID 适合分布式系统,无需协调即可生成;缺点是占用空间大(16 字节 vs 4/8 字节)且无序插入影响 B+ 树索引性能。如果需要 UUID 作主键,推荐使用 UUID v7 以保持时间有序性。
ULID 更紧凑(26 字符 vs 36 字符)、天然按时间排序、不含连字符更适合 URL。但 UUID 生态更成熟,几乎所有语言和数据库都有原生支持。新项目可优先考虑 ULID 或 UUID v7。