什么是 UUID v1?
UUID 版本 1 是一种基于时间的 128 位标识符(36 字符字符串),定义于 RFC 4122。它组合了:
- 时间戳:60 位值(自 1582-10-15 起以 100 纳秒为单位)
- 时钟序列:14 位计数器,用于调整时钟回拨
- 节点 ID:48 位值(通常是 MAC 地址)
格式示例:2ed6657d-e927-11eb-9a03-0242ac130003
UUID v1 如何工作
- 计算当前时间戳(自 1582-10-15 起以 100 纳秒为间隔)
- 获取/递增 14 位时钟序列(在时钟回拨时保证唯一性)
- 获取 48 位节点 ID(通常来自 MAC 地址)
- 设置版本位(0001)和变体位(10)
- 组装成 32 个十六进制数字并加连字符:8-4-4-4-12 格式
优点与注意事项
优点 | 注意事项 |
---|---|
|
|
UUID v1 结构
位 | 内容 |
---|---|
0-31 | 时间戳的低 32 位 |
32-47 | 时间戳的中间 16 位 |
48-59 | 时间戳的高 12 位 |
60-63 | 版本(v1 为 0001) |
64-65 | 变体(RFC4122 为 10) |
66-79 | 时钟序列(14 位) |
80-127 | 节点 ID(48 位) |
UUID v1 与其他版本对比
版本 | 基于 | 用例 | 隐私 |
---|---|---|---|
UUID v1 | 时间 + MAC | 可排序 ID | ⚠️ 暴露 MAC |
UUID v3 | 命名空间 + MD5 | 确定性 ID | ✅ 私密 |
UUID v4 | 随机 | 安全随机 ID | ✅ 私密 |
UUID v5 | 命名空间 + SHA-1 | 确定性 ID | ✅ 私密 |
UUID v6 | 时间(重排) | 可排序 ID | ⚠️ 暴露 MAC |
UUID v7 | 时间 + 随机 | 可排序 ID | ✅ 私密 |
常见用例
- 数据库键:分布式数据库
- 审计日志:按时间跟踪
- 事务 ID:业务流程
- 会话跟踪:Web 应用
- 内容寻址:CMS 系统
- 物联网消息:设备通信
常见问题
UUID v1 是否具备加密安全性?
不具备。若已知时间戳和 MAC 地址,UUID v1 可被预测。若需更高安全,请使用随机 UUID v4。
UUID v1 值会发生冲突吗?
由于时间戳精度、时钟序列计数器和节点 ID,冲突在实践中极为罕见。
我能否从 UUID v1 中提取创建时间?
可以。多数 UUID 库提供算法来提取时间戳部分。
UUID v1 可按创建时间排序吗?
可以,但需特殊排序函数。直接字符串比较无法正确排序。
UUID v1 会暴露我的 MAC 地址吗?
默认会。大多数实现使用 MAC 作为节点 ID。关注隐私的实现可使用随机节点 ID。