UUID生成器
开发&运维版本1 UUID 由时间戳(60位)、时钟序列(14位)和节点ID(48位)组成
版本2 UUID 用于DCE安全,包含POSIX UID/GID信息
版本3 UUID 使用MD5哈希从命名空间和名称生成
版本4 UUID 是完全随机生成的
版本5 UUID 使用SHA-1哈希从命名空间和名称生成
版本6 UUID 是版本1的时间排序变体,更适合数据库索引
版本7 UUID 使用Unix时间戳和随机数生成,适合现代应用
版本8 UUID 允许自定义数据格式,保留版本和变体位
全零UUID: 00000000-0000-0000-0000-000000000000
UUID是什么?
UUID(Universally Unique Identifier,通用唯一识别码)是一种标准化的128位标识符格式,用于在分布式系统中唯一标识信息而不需要中央注册机构。UUID就像是数字世界的身份证号,它能保证在全球范围内都不会重复。UUID最初由Apollo计算机公司的工程师设计,后来被开放软件基金会(OSF)标准化,并最终成为RFC 4122规范。
UUID具有多个版本,每个版本的算法不同,应用范围也不同。下面我们来了解下UUID各个版本的特点。
UUID1:时间序列标识
基于精确时间戳(100纳秒精度)和硬件地址生成的UUID,包含60位时间戳、14位时钟序列和48位节点ID。优势在于时间有序性,适合需要严格时序的数据库索引,但存在暴露硬件信息的隐私风险。典型应用于金融交易系统、分布式日志等需要时间追溯的场景。
UUID2:DCE安全标识
早期用于分布式计算环境的扩展版本,在版本1基础上加入了POSIX UID/GID信息。目前已被现代系统淘汰,仅在某些遗留系统中可见。其设计反映了早期分布式安全模型的特点,现今使用价值有限。
UUID3/5:命名空间哈希型
通过哈希算法(MD5/SHA-1)将命名空间和名称转换为固定UUID。版本3使用MD5(128位),版本5采用更安全的SHA-1(160位)。核心优势是确定性生成,相同输入必然产生相同输出,常用于内容寻址系统。需注意MD5已不推荐用于安全敏感场景。
UUID4:随机生成型
完全基于密码学安全随机数生成的UUID,包含122位随机熵值。实现简单且无隐私泄露风险,是应用最广泛的版本。但由于完全无序性,不适合直接作为数据库主键。现代系统通常需要额外处理才能获得良好索引性能。
UUID6:时间排序优化型
对版本1的改良设计,通过重新排列时间字段字节顺序优化数据库索引效率。保留时间有序性的同时,使UUID的字典序与时间顺序严格一致,特别适合高吞吐量时间序列数据存储。
UUID7:现代时间戳型
基于Unix时间戳(秒级精度)的新标准,解决了版本1的隐私问题。48位时间戳配合80位随机数的设计平衡了排序需求和安全性,是云原生时代的推荐方案,尤其适合微服务架构。
UUID8:自定义扩展型
提供最大灵活性的开放框架,保留版本标识位外均可自定义使用。支持特殊业务编码需求或实验性协议设计,但需要开发者自行保证唯一性。适用于专有系统或特殊标识场景。
Nil UUID
全零值的特殊标识符(00000000-0000-0000-0000-000000000000),用于表示空值或初始化状态。在系统设计中常作为占位符或默认值使用,具有明确的语义含义。
如何选择合适的UUID版本?
- 需要时间排序:优先考虑版本1、6、7,数据库主键推荐版本6/7;
- 安全性要求高:避免版本1(隐私泄露风险),推荐版本4(完全随机)或版本5(安全哈希);
- 确定性需求:版本3或版本5,相同输入产生相同输出;
- 最简单实现:版本4无需任何参数,适合大多数通用场景;
- 特殊需求:自定义需求考虑版本8,传统系统兼容考虑版本2;
关于UUID生成器
此UUID生成工具提供了全面而专业的UUID生成能力,覆盖所有标准版本,通过详细的参数配置和多种输出选项,可以满足从简单测试到专业系统设计的各种需求。另见:GUID生成器