UUID生成与验证

选项
UUID 检查器
结果
83c9db58-ef0b-49e8-abaf-892d454672a7
4690fc94-9fb7-4162-9ad1-356b2fdea303
0d1c7f22-22c1-469e-bfdc-a8e4ed97d4a5
1f7d0911-e950-494e-a9c2-f5e159e063b1
8650a959-43a2-4a74-8175-05fec1775c3a
2494ab52-e03d-416c-bc18-175c4abac198
a2750d28-e558-4bcf-9429-0f31ddb77509
4eb9ab74-2995-480c-8454-ab26a2e88245
2908b8a4-fadd-4f79-8783-3d151854c1cf
91341675-9150-4ec1-b00b-1d145501f4af
概述
Generated by AI

UUID 生成器支持创建多种版本的通用唯一标识符(UUID),包括基于时间、随机、哈希和特殊值的 UUID。同时提供 UUID 检查器功能,用于验证和分析现有 UUID 的版本、变体和有效性。适用于数据库主键生成、分布式系统标识、会话管理等场景。

核心功能

UUID 生成

  • 多版本支持:生成 V1、V3、V4、V5、V6、V7 版本的 UUID
  • 特殊值:创建 NIL(全零)和 MAX(全一)UUID
  • 批量生成:一次生成最多 100 个 UUID
  • 命名空间支持 和 V5 支持自定义命名空间和名称

UUID 检查器

  • 有效性验证:检查字符串是否符合 UUID 格式
  • 版本检测:自动识别 UUID 版本(1-7)
  • 变体分析:确定 UUID 变体 (RFC 4122、NCS、Microsoft、Future)
  • 特殊检测:识别 NIL 和 MAX UUID
  • 规范化:显示小写标准格式的 UUID

UUID 版本详解

NIL UUID

格式:00000000-0000-0000-0000-000000000000

所有位都设置为零的特殊 UUID, 用作:

  • 数据库中的空值占位符
  • 未初始化状态的默认值
  • 缺失或无效 ID 的标识

MAX UUID

格式:ffffffff-ffff-ffff-ffff-ffffffffffff

所有位都设置为一的特殊 UUID, 用作:

  • 边界测试的最大值哨兵
  • 范围查询的上限
  • 特殊标记值

V1:基于时间

使用当前时间戳和 MAC 地址生成,特点:

  • 时序性:按生成时间自然排序
  • 唯一性:结合时间戳和硬件地址,极低碰撞概率
  • 隐私问题:可能暴露 MAC 地址和生成时间
  • 适用场景:日志记录、事件追踪(需注意隐私)

V3:MD5 哈希

通过对命名空间 UUID 和名称进行 MD5 哈希生成,特点:

  • 确定性:相同输入总是产生相同 UUID
  • 命名空间隔离:不同命名空间下的同名称产生不同 UUID
  • 兼容性:使用 MD5 算法,计算速度快
  • 适用场景:需要从名称生成一致标识符(遗留系统)

V4:随机

使用随机数或伪随机数生成,特点:

  • 简单性:最易实现,无需额外参数
  • 隐私性:不包含时间或硬件信息
  • 高碰撞率:理论上存在碰撞,但概率极低 (2^122 分之一)
  • 适用场景:通用唯一标识,最常用版本

V5:SHA-1 哈希

与 V3 类似,但使用 SHA-1 哈希,特点:

  • 确定性:相同输入总是产生相同 UUID
  • 更强安全性 比 MD5 抗碰撞性更好
  • 推荐替代:新应用应优先使用 V5 而非 V3
  • 适用场景:需要从名称生成一致标识符

V6:重排序的基于时间

V1 的改进版,重新排列时间戳字段,特点:

  • 时序性:保留时间排序特性
  • 数据库友好:更适合 B-tree 索引和排序
  • 兼容性:与 V1 使用相同时间精度
  • 适用场景:数据库主键、需要时序性的分布式 ID

V7:Unix 时间戳

使用毫秒级 Unix 时间戳和随机位,特点:

  • 时序性:按生成时间自然排序
  • 隐私性:不包含 MAC 地址
  • 数据库友好:适合作为主键,索引效率高
  • 推荐使用:结合时序性和隐私性的现代选择

使用方法

生成 UUID

  1. 选择版本:从版本选择器中选择 UUID 版本 (NIL、MAX、V1-V7)
  2. 配置选项(适用于 V3/V5):
    • 选择预定义命名空间 (DNS、URL、OID、X500)
    • 或输入自定义命名空间 UUID
    • 输入要哈希的名称
  3. 设置数量:选择要生成的 UUID 数量(1-100)
  4. 查看结果:生成的 UUID 会显示在右侧面板
  5. 复制使用:点击单个 UUID 复制,或使用「全部复制」按钮

检查 UUID

  1. 粘贴 UUID:在检查器输入框中输入 UUID 字符串
  2. 查看分析:
    • 有效性状态(有效/无效)
    • 规范化形式(小写标准格式)
    • 版本号 (1-7 或未知)
    • 变体类型 (RFC 4122、NCS、Microsoft、Future)
    • 特殊类型检测(NIL / MAX)
  3. 验证结果:确认 UUID 是否符合预期格式和版本

命名空间 UUID

用于 V3 和 V5 的预定义命名空间:

命名空间UUID使用场景
DNS6ba7b810-9dad-11d1-80b4-00c04fd430c8域名标识(如 example.com)
URL6ba7b811-9dad-11d1-80b4-00c04fd430c8URL 地址标识
OID6ba7b812-9dad-11d1-80b4-00c04fd430c8ISO OID 标识
X5006ba7b814-9dad-11d1-80b4-00c04fd430c8X.500 DN 标识

应用场景

数据库主键

  • 使用 V4 生成随机主键,避免序列号泄露数据量
  • 使用 V7 生成时序主键,提升插入性能和范围查询效率
  • 使用 V5 从业务标识生成确定性主键

分布式系统

  • 各节点独立生成 UUID 无需中心化协调
  • V1/V6/V7 支持时间排序,便于分片和归档
  • V4 确保不同系统间 ID 不冲突

会话管理

  • 使用 V4 生成唯一会话令牌
  • 使用 V7 结合时间戳实现自动过期机制
  • 使用 V5 从用户 ID 生成确定性会话标识

文件命名

  • 为上传文件生成唯一文件名,避免覆盖
  • 使用 V7 确保文件名按时间排序
  • 使用 V4 确保随机性和隐私性

API 资源标识

  • RESTful API 中的资源 ID
  • GraphQL 中的全局唯一 ID
  • 微服务间的请求跟踪 ID

消息队列

  • 消息唯一标识符
  • 事件溯源中的事件 ID
  • 分布式事务的事务 ID

生成示例

示例 1:生成随机 UUID (V4)

设置:

  • 版本:V4
  • 数量:3

输出:

f47ac10b-58cc-4372-a567-0e02b2c3d479
7c9e6679-7425-40de-944b-e07fc1f90ae7
550e8400-e29b-41d4-a716-446655440000

示例 2:生成确定性 UUID (V5)

设置:

  • 版本:V5
  • 命名空间:DNS (6ba7b810-9dad-11d1-80b4-00c04fd430c8)
  • 名称:example.com

输出:

cfbff0d1-9375-5685-968c-48ce8b15ae17

相同输入总是生成相同 UUID, 适用于需要幂等性的场景。

示例 3:生成时序 UUID (V7)

设置:

  • 版本:V7
  • 数量:3

输出:

018c5a2e-7c00-7000-8000-000000000001
018c5a2e-7c00-7001-8000-000000000002
018c5a2e-7c00-7002-8000-000000000003

注意前缀相同,可按时间排序。

示例 4:UUID 检查器

输入:

550e8400-e29b-41d4-a716-446655440000

分析结果:

  • 有效:是
  • 规范化:550e8400-e29b-41d4-a716-446655440000
  • 版本:4
  • 变体:RFC 4122(标准)
  • 特殊类型:无

示例 5:基于 URL 的 UUID (V5)

设置:

  • 版本:V5
  • 命名空间:URL (6ba7b811-9dad-11d1-80b4-00c04fd430c8)
  • 名称:https://example.com/users/123

输出:

2ed6657d-e927-568b-95e1-2665a8aea6a2

适用于从 URL 生成一致性标识符。

最佳实践

版本选择建议

  • 通用场景:使用 V4(随机)或 V7(时序)
  • 数据库主键:优先使用 V7,其次 V4
  • 确定性生成:使用 V5(推荐)或 V3(兼容)
  • 隐藏硬件信息:避免使用 V1,选择 V4 或 V7
  • 时序排序:使用 V1、V6 或 V7

存储优化

  • 数据库中以 16 字节二进制格式存储,而非 36 字节字符串
  • 创建索引时注意 V4 的随机性可能导致索引碎片
  • V7 和 V6 适合 B-tree 索引,插入性能更好

安全注意

  • V1 可能泄露 MAC 地址和生成时间,避免用于敏感场景
  • V3 使用 MD5, 不适合加密场景
  • 不要将 UUID 作为安全令牌或密码
  • 生成 UUID 后应通过安全通道传输

技术说明

  • 工具基于 uuid 库,符合 RFC 4122 标准
  • V1-V7 的随机性基于加密安全的随机数生成器
  • V3 和 V5 的哈希计算在客户端完成,不会泄露输入数据
  • 检查器使用标准 UUID 验证和解析算法

特点

  1. 支持更多版本(包括最新的 V6 和 V7) 和命名空间选项
  2. 提供批量生成和检查器功能,无需记忆参数
  3. 无需编写代码即可快速验证和测试 UUID

常见问题

UUID 是否真的唯一

理论上 UUID 可能碰撞,但概率极低:

  • V4:碰撞概率约为 2^-122,生成 10 亿个 UUID 碰撞概率仅为 0.0000000001%
  • V1/V6/V7:结合时间戳和随机位,几乎不可能碰撞
  • V3/V5:相同输入会产生相同 UUID, 需确保输入唯一性

如何选择命名空间

对于 V3 和 V5:

  • 使用 DNS 命名空间处理域名
  • 使用 URL 命名空间处理完整 URL
  • 使用 OID 命名空间处理 ISO 对象标识符
  • 使用自定义命名空间隔离不同应用或租户

为什么推荐 V5 而非 V3

SHA-1 比 MD5 具有更好的抗碰撞性,虽然 SHA-1 已不推荐用于加密,但对 UUID 生成仍足够安全。新应用应优先使用 V5,除非需要与仅支持 V3 的遗留系统兼容。

展开更多