Skip to content
utility2026-07-253 分钟阅读

什么是 UUID

UUID(Universally Unique Identifier)是一种 128 位的唯一标识符,设计目标是在不需要中央协调的情况下生成全局唯一的 ID。UUID 的标准格式为:

550e8400-e29b-41d4-a716-446655440000

共 36 个字符(含 4 个连字符),分为 5 段,每段由 16 进制数字组成。

UUID 的版本

UUID v4(随机生成)

最常用的版本,完全由随机数生成。碰撞概率极低——生成 10 万亿个 UUID,碰撞概率仅为 50%。

格式:xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
      (4 = 版本号, y = 8/9/a/b)

适用场景:数据库主键、会话 ID、API 请求追踪

UUID v1(时间戳 + MAC)

基于当前时间戳和机器 MAC 地址生成。包含时间信息但暴露 MAC 地址,有隐私风险。

UUID v5(基于命名空间)

使用 SHA-1 哈希对命名空间 + 名称生成确定性 UUID。相同输入始终产生相同输出。

适用场景:需要可重现 ID 的场景(如 URL 的唯一标识)

NanoID:更短的替代方案

NanoID 是一种可配置长度的唯一 ID 生成器,默认使用 URL 友好的字符集(A-Za-z0-9_-):

NanoID (21位): V1StGXR8_Z5jdHi6B-myT

与 UUID v4 的对比:

| 特性 | UUID v4 | NanoID | |------|---------|--------| | 长度 | 36 字符 | 可配置(默认 21) | | 字符集 | 十六进制 | 64 个 URL 友好字符 | | 碰撞概率 | 2^-128 | 取决于长度和字符集 | | URL 友好 | 需要移除连字符 | 天然友好 |

ULID:带排序能力的唯一 ID

ULID(Universally Unique Lexicographically Sortable Identifier)结合了时间戳和随机数,支持按时间排序:

格式:01ARZ3NDEKTSV4RRFFQ69G5FAV (26字符, Crockford Base32)

| 特性 | UUID v4 | ULID | |------|---------|------| | 排序 | 无序 | 按时间有序 | | 长度 | 36 字符 | 26 字符 | | 可排序 | ❌ | ✅ | | 时间信息 | ❌ | ✅(前 10 位是时间戳) |

适用场景:需要按创建时间排序的主键、日志追踪

如何选择 ID 方案

| 场景 | 推荐方案 | |------|---------| | 数据库主键 | ULID(有序,索引友好) | | 会话/追踪 ID | UUID v4(标准、广泛支持) | | 短链接/邀请码 | NanoID(短、URL 友好) | | 可重现 ID | UUID v5(确定性) | | 分布式系统 | UUID v4 或 ULID(无需协调) |

使用在线 UUID 生成器

DevToolkit Pro 的 UUID 生成器 支持:

  • UUID v4:一键生成,复制即用
  • NanoID:可自定义长度和字符集
  • ULID:带时间戳的可排序 ID
  • 批量生成:一次生成多个 ID

FAQ

UUID 碰撞概率有多大?

UUID v4 的空间为 2^128 ≈ 3.4×10^38。生成 10 亿个 UUID,碰撞概率约为 10^-18(几乎为零)。在实际应用中,UUID 碰撞从未被确认发生过。

NanoID 比 UUID 安全吗?

取决于长度和字符集。21 位 NanoID(64 字符集)的熵约为 126 bit,与 UUID v4(128 bit)接近。选择足够长的 NanoID 即可。

为什么 ULID 比 UUID 适合做数据库主键?

数据库索引(如 B+Tree)对有序插入更高效。UUID v4 完全随机,每次插入都可能导致页分裂。ULID 按时间排序,插入模式更接近顺序写,性能更好。


本文由 DevToolkit Pro 提供。更多开发者工具请访问 首页


ad