UUID生成器怎么用?UUID与GUID区别、UUID v4随机唯一标识符生成详解

在微服务拆分、订单号生成、前端分布式事务跟踪(TraceID)以及客户端设备唯一识别等场景中,我们几乎每天都在和类似 c3b2f678-8d2a-4f51-b841-39c288927e10 的字符串打交道。它就是工业级通用的通用唯一识别码(Universally Unique Identifier / UUID)。

本文将为你详解 UUID 的内部结构、它与微软 GUID 的渊源、主流版本区别,以及高并发环境下生成唯一 ID 的注意事项。

1. 什么是 UUID?与 GUID 有什么区别?

UUID 是由分布式计算环境(DCE)规范定义的 128 位长度的数字标识符。微软在其 Windows 系统和 COM 组件中采用了相同的标准实现,并将其称之为 GUID(Globally Unique Identifier,全局唯一标识符)。

简而言之:在绝大多数软件开发场景中,UUID 和 GUID 可以视为同义词,本质上都是指符合 RFC 4122 规范的 128 位唯一编码。

2. UUID 的标准结构与表示形式

一个标准的 UUID 占用 16 个字节(128 bit),通常以 32 个十六进制字符表示,并通过 4 个连字符(减号 -)分割为 8-4-4-4-12 的形式,总计 36 个字符:

xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
例如: 550e8400-e29b-41d4-a716-446655440000
  • 其中的第 13 位字符 M 代表 UUID 的版本号(Version),如 4 即代表最常用的 UUID v4;
  • 第 17 位字符 N 代表 UUID 的变体(Variant),通常取值为 8、9、a 或 b。

3. UUID 的 5 个版本核心原理解析

版本 生成依赖 特点与适用场景
v1(基于时间与MAC地址) 当前时间戳 + 网卡物理 MAC 地址 保证物理世界唯一,但会泄露网卡地址和服务器确切创建时间,存在隐私风险
v3(基于命名空间与MD5) 命名空间 + 自定义字符串 + MD5散列 相同输入必定生成相同 UUID(幂等确定性)
v4(基于强伪随机数) 纯加密级随机数生成(CSPRNG) 开发中使用最广泛(占比超过95%),无任何硬件信息绑定,极速安全
v5(基于命名空间与SHA1) 命名空间 + 自定义字符串 + SHA-1散列 与 v3 机制相同,但哈希算法换成了安全性更高的 SHA-1

4. UUID v4 会不会发生重复(碰撞)?

由于 UUID v4 是基于随机数生成的,理论上存在碰撞几率。但它的数学概率有多低呢?

在 UUID v4 中,有整整 122 位纯随机二进制位,总可能组合数为 2^122 ≈ 5.3 × 10^36。即使全球每秒钟连续生成 10 亿个 UUID,持续运行 100 年发生碰撞的概率也可以忽略不计。在工程实践中,完全可以将其视为绝对不重复。

5. 数据库主键选择:UUID 作主键的痛点与建议

  • 优点:无需依赖数据库自增序列,客户端即可提前生成主键,分库分表与数据合并极为方便;
  • 缺点:UUID v4 是无序随机的,作为 MySQL InnoDB 的聚簇索引主键时,会导致 B+ 树叶子节点频繁页分裂(Page Split)和大量磁盘随机 I/O,严重影响大规模写入性能。
  • 优化建议:若数据量超过百万级,建议使用雪花算法(Snowflake)或去掉连字符后转为固定 16 字节二进制(BINARY(16))存储。

6. 在线批量生成 UUID 工具

需要快速生成一批测试 ID、订单唯一编号时,推荐使用易处理 UUID生成器:支持一键批量生成高达 100 个 UUID,可自由切换大写/小写、一键去除连字符 -,并提供快捷复制导出能力。

UUID生成器

高效安全的在线工具,无需安装即用即走

立即在线处理