生成结果
0 个 UUID点击"生成 UUID"按钮开始生成
UUID 版本说明
UUID v1
基于时间戳和MAC地址生成,包含时间信息,可能泄露MAC地址。
UUID v3
基于命名空间和名称使用MD5散列生成,相同输入产生相同UUID。
UUID v4
完全随机生成,最常用的版本,提供良好的唯一性保证。
UUID v5
基于命名空间和名称使用SHA-1散列生成,相同输入产生相同UUID。
关于 UUID
UUID (Universally Unique Identifier,通用唯一标识符) 是一种标准化的标识符格式,用于在分布式系统中唯一标识信息。UUID 由 32 个十六进制数字组成,以连字符分隔为五组:xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
。
UUID 版本详解
UUID v1 - 基于时间戳
- 构成: 时间戳 + MAC地址 + 随机数
- 特点: 包含创建时间信息,可以排序
- 缺点: 可能泄露MAC地址,存在隐私风险
- 使用场景: 需要时间排序的分布式系统
UUID v3 - 基于名称的MD5散列
- 构成: 命名空间UUID + 名称 → MD5散列
- 特点: 相同输入始终产生相同UUID
- 优点: 确定性生成,可重现
- 使用场景: 需要根据固定输入生成固定UUID的场景
UUID v4 - 随机生成
- 构成: 完全随机生成(122位随机数据)
- 特点: 最常用的版本,碰撞概率极低
- 优点: 无隐私泄露风险,生成简单
- 使用场景: 大多数需要唯一标识符的场景
UUID v5 - 基于名称的SHA-1散列
- 构成: 命名空间UUID + 名称 → SHA-1散列
- 特点: 类似v3但使用SHA-1,安全性更好
- 优点: 确定性生成,比v3更安全
- 使用场景: 需要根据输入生成UUID且要求更高安全性
常见使用场景
- 数据库主键: 替代自增ID,避免分布式环境下的冲突
- API请求追踪: 为每个请求分配唯一标识符
- 文件命名: 确保文件名的唯一性
- 会话标识: Web应用中的会话ID
- 消息队列: 消息的唯一标识符
- 微服务: 服务间调用的请求ID
UUID 格式说明
标准UUID格式:xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
- M: 版本号 (1, 3, 4, 5)
- N: 变体标识 (通常为8, 9, A, B)
- 总长度: 36个字符 (包含4个连字符)
- 16进制数字: 0-9, A-F
编程语言中的UUID
JavaScript
// 生成UUID v4
function generateUUID() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
var r = Math.random() * 16 | 0;
var v = c == 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
}
Python
import uuid
# UUID v4 (随机)
uuid4 = uuid.uuid4()
# UUID v1 (时间戳)
uuid1 = uuid.uuid1()
# UUID v3 (MD5)
namespace = uuid.NAMESPACE_DNS
uuid3 = uuid.uuid3(namespace, 'example.com')
# UUID v5 (SHA-1)
uuid5 = uuid.uuid5(namespace, 'example.com')
Java
import java.util.UUID;
// 生成随机UUID
UUID uuid = UUID.randomUUID();
// 从字符串创建UUID
UUID fromString = UUID.fromString("550e8400-e29b-41d4-a716-446655440000");
最佳实践
-
选择合适的版本:
- 一般情况下使用 UUID v4
- 需要时间排序时使用 UUID v1
- 需要确定性生成时使用 UUID v3/v5
-
存储优化:
- 数据库中可以存储为BINARY(16)节省空间
- 建立索引时考虑UUID的随机性对性能的影响
-
安全考虑:
- UUID v1 可能泄露MAC地址
- 不要依赖UUID的不可预测性作为安全措施
-
性能考虑:
- UUID作为主键可能影响数据库性能
- 考虑使用有序UUID或其他策略