UUID(Universally Unique Identifier,通用唯一标识符)是一个128位的标识符,通常表示为32个十六进制数字,以连字符分为5组:8-4-4-4-12。UUID的设计目的是在分布式系统中无需中央协调即可生成全局唯一的标识符。
| 版本 | 生成方式 | 特点 |
|---|---|---|
| v1 | 基于时间戳 + MAC地址 | 包含创建时间信息,可能泄露MAC地址 |
| v2 | 基于时间戳 + POSIX UID/GID | DCE安全版本,较少使用 |
| v3 | 基于命名空间 + MD5哈希 | 相同输入产生相同UUID,确定性生成 |
| v4 | 基于随机数 | 最常用,完全随机,无信息泄露 |
| v5 | 基于命名空间 + SHA-1哈希 | 类似v3,但使用更安全的哈希算法 |
| v7 | 基于Unix时间戳 + 随机数 | 新标准(RFC 9562),可排序,适合数据库主键 |
UUID v4 有 2^122(约 5.3 × 10^36)种可能。根据生日悖论:
| 已生成数量 | 碰撞概率 |
|---|---|
| 10亿(10^9) | 约 10^-19(十亿分之十亿分之一) |
| 1万亿(10^12) | 约 10^-13 |
| 2.71 × 10^18 | 约 50%(需生成这么多才有一半概率碰撞) |
如果每秒生成10亿个UUID,需要连续生成约86年才有50%的概率出现一次碰撞。