UUID 生成器
什么是 UUID?
UUID(Universally Unique Identifier,通用唯一标识符)是一种标准化的标识符格式,用于在分布式系统中唯一标识信息。UUID 也被称为 GUID(Globally Unique Identifier,全局唯一标识符),它们本质上是相同的概念。
UUID 的主要特点:
- 全球唯一性:在正确生成的情况下,UUID 具有全球唯一性
- 标准格式:遵循 RFC 4122 标准规范
- 无需中央控制:可以在任何地方独立生成
- 固定长度:128 位(16 字节)数据,通常表示为 32 个十六进制字符
- 广泛支持:几乎所有编程语言和数据库都支持 UUID
标准格式:
xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
其中:
x
代表十六进制数字(0-9,a-f)M
代表 UUID 版本号N
代表变体信息
UUID 版本类型
UUID v1 (基于时间戳)
特点:
- 基于 MAC 地址和时间戳生成
- 包含时间信息,可以提取生成时间
- 在同一台机器上生成的 UUID 是有序的
优点:
- 包含时间信息,便于调试和分析
- 在单机环境下可保证顺序性
- 生成速度快
缺点:
- 可能泄露 MAC 地址信息
- 在虚拟化环境中可能出现重复
- 依赖系统时钟
适用场景:
- 数据库主键(需要时间排序)
- 日志记录标识
- 需要时间追溯的场景
示例:
550e8400-e29b-41d4-a716-446655440000
UUID v4 (随机生成)
特点:
- 基于随机数或伪随机数生成
- 不包含任何机器或时间信息
- 完全随机,无法预测
优点:
- 不泄露任何系统信息
- 安全性更高
- 不依赖系统环境
缺点:
- 纯随机,无序
- 理论上存在极小的碰撞概率
适用场景:
- API 密钥和令牌
- 会话标识符
- 临时文件名
- 安全要求较高的场景
示例:
6ba7b810-9dad-11d1-80b4-00c04fd430c8
工具功能特性
单个生成
- 版本选择:支持 UUID v1 和 v4 两种版本
- 格式选项:
- 大写/小写字母
- 是否包含连字符
- 是否添加大括号
- 即时生成:点击按钮立即生成新的 UUID
- 一键复制:支持快速复制生成的 UUID
批量生成
- 数量控制:支持 1-1000 个 UUID 的批量生成
- 统一格式:批量生成的 UUID 采用相同的格式设置
- 导出功能:可将生成的 UUID 列表导出为文本文件
- 批量复制:支持一键复制所有生成的 UUID
UUID 验证
- 格式验证:检查输入的 UUID 是否符合标准格式
- 信息解析:显示 UUID 的版本、变体等详细信息
- 时间提取:对于 v1 UUID,尝试提取和显示时间戳信息
- 实时反馈:输入时即时显示验证结果
使用方法
生成单个 UUID
- 选择”单个生成”标签页
- 选择 UUID 版本(v1 或 v4)
- 根据需要设置格式选项
- 点击”生成新 UUID”按钮
- 点击复制按钮保存结果
批量生成 UUID
- 选择”批量生成”标签页
- 设置生成数量(1-1000)
- 点击”批量生成”按钮
- 使用”复制全部”或”导出”功能保存结果
验证 UUID
- 选择”UUID 验证”标签页
- 在输入框中粘贴或输入要验证的 UUID
- 查看验证结果和详细信息
格式说明
标准格式
550e8400-e29b-41d4-a716-446655440000
无连字符格式
550e8400e29b41d4a716446655440000
大写格式
550E8400-E29B-41D4-A716-446655440000
大括号格式
{550e8400-e29b-41d4-a716-446655440000}
应用场景
数据库主键
CREATE TABLE users (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
username VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL
);
API 开发
// 生成API请求ID
const requestId = generateUUID()
console.log(`Processing request: ${requestId}`)
// REST API资源标识
const userId = '550e8400-e29b-41d4-a716-446655440000'
const apiUrl = `https://api.example.com/users/${userId}`
文件命名
// 临时文件命名
const tempFileName = `temp_${generateUUID()}.json`
// 上传文件重命名
const uploadedFile = `uploads/${generateUUID()}_${originalName}`
分布式系统
// 微服务请求追踪
const traceId = generateUUID()
logger.info(`Service A processing`, { traceId })
// 消息队列
const messageId = generateUUID()
queue.publish({ id: messageId, data: payload })
最佳实践
版本选择建议
使用 UUID v4 的场景:
- Web 应用的会话 ID
- API 密钥和访问令牌
- 安全相关的标识符
- 微服务间的请求 ID
使用 UUID v1 的场景:
- 数据库记录 ID(需要时间排序)
- 日志记录的唯一标识
- 需要时间追溯的业务场景
- 审计和监控系统
存储优化
-
数据库存储:
- 使用专门的 UUID 数据类型
- 考虑使用 ULID 等时间排序友好的替代方案
- 注意索引性能影响
-
网络传输:
- JSON 中使用字符串格式
- 二进制传输时使用原始 128 位格式
- 考虑压缩传输
性能考虑
-
生成性能:
- v4 版本生成速度更快
- 批量生成时注意内存使用
- 考虑使用 UUID 池预生成
-
比较和查找:
- 二进制格式比较更快
- 建立适当的数据库索引
- 避免字符串模糊匹配
安全注意事项
-
信息泄露:
- v1 版本可能泄露 MAC 地址
- 时间戳信息可能被用于攻击
- 在安全敏感场景使用 v4
-
随机性质量:
- 确保随机数生成器质量
- 避免使用弱随机数源
- 定期检查生成的 UUID 分布
常见问题
Q: UUID 真的是全球唯一的吗?
A: 在正确实现的情况下,UUID 的冲突概率极低。对于 v4 UUID,碰撞概率约为 1/2^122,在实际应用中可以认为是唯一的。
Q: 什么时候应该使用 UUID 而不是自增 ID?
A: UUID 适用于分布式系统、需要在客户端生成 ID、多数据库同步等场景。自增 ID 适用于单数据库、需要紧凑存储、要求顺序性的场景。
Q: UUID 可以作为 URL 的一部分吗?
A: 可以,但需要进行 URL 编码。大括号格式的 UUID 在 URL 中需要编码,建议使用标准格式或无连字符格式。
Q: 如何在不同编程语言间共享 UUID?
A: 使用标准的字符串格式(如:550e8400-e29b-41d4-a716-446655440000)是最安全的跨语言方式。
UUID 是现代软件开发中不可或缺的工具,合理使用 UUID 可以大大简化分布式系统的设计和实现。