UUID 生成器
免费在线批量生成UUID v4,支持多种格式输出,本地生成保障唯一性
格式选项
批量生成
什么是 UUID 生成器?
UUID(Universally Unique Identifier,通用唯一识别码)生成器是一款在线生成符合 RFC 4122 标准的 UUID 的工具。UUID 是一个 128 位的标识符,通常表示为 32 个十六进制数字,以连字符分为 5 段(8-4-4-4-12),例如 550e8400-e29b-41d4-a716-446655440000。UUID 的最大优势是"不需要中央协调"就能保证全局唯一性——不同的机器、不同的进程同时生成的 UUID 极大概率不重复。这使 UUID 成为分布式系统中生成唯一 ID 的理想选择:数据库主键、会话标识、API 令牌、文件名等。本工具支持 UUID v1(基于时间戳)、v4(完全随机)、v5(基于命名空间哈希)等多种版本,支持批量生成和不同格式输出。
如何使用 UUID 生成器
- 步骤一:选择 UUID 版本 — 选择需要的版本:v4(最常用,完全随机)、v1(基于时间戳+MAC 地址)、v5(基于命名空间和名称的确定性生成)。
- 步骤二:设置生成参数 — 设置生成数量(1-1000个)、输出格式(标准格式、无连字符、大写、带 URN 前缀)。
- 步骤三:生成并复制 — 点击生成按钮,UUID 列表立即显示。一键复制全部或单个 UUID。
常见使用场景
场景一:数据库主键生成
分布式数据库(如分片数据库、多主集群)无法依赖自增 ID,UUID 是生成全局唯一主键的标准方案。使用 UUID v4 作为数据库表的 ID 字段,避免 ID 冲突。
场景二:API 请求追踪 ID
为每个 API 请求生成唯一的 Request ID(UUID v4),记录在请求头和日志中。跨服务调用时通过 Request ID 追踪完整的请求链路,方便问题排查。
场景三:文件上传唯一命名
用户上传的文件使用 UUID 重命名后存储,避免文件名冲突。结合文件扩展名(如 uuid.jpg)存储到对象存储(S3/OSS),确保文件名全局唯一。
技术原理
UUID v4 的 128 位中有 122 位是随机的(版本号和变体位固定),提供 2^122 ≈ 5.3 × 10³⁶ 种可能的组合。根据生日悖论,生成 2.7 × 10¹⁸ 个 UUID 后碰撞概率才达到 50%——这在实际应用中几乎不可能发生。JavaScript 中使用 crypto.randomUUID()(Node.js 16+/现代浏览器)直接生成 v4 UUID。
// UUID v4 生成
// 现代方法(推荐)
const uuid = crypto.randomUUID();
// "550e8400-e29b-41d4-a716-446655440000"
// 兼容方法
function uuidv4() {
return ([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g, c =>
(c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16)
);
}
// UUID v5(确定性生成)
// 相同命名空间+名称 总是生成相同的 UUID
const nameUUID = require('uuid');
nameUUID.v5('hello', nameUUID.v5.DNS);
// 总是返回相同的 UUID
最佳实践与注意事项
- 数据库中使用 UUID 作为主键时,建议使用 UUID v7(基于时间戳+随机,有序)代替 v4(无序),避免 B-Tree 索引频繁分裂影响写入性能。
- UUID 较长(36 字符),如果存储空间敏感,可以存储为 16 字节二进制格式而非字符串。
- 不要使用 UUID v1(基于 MAC 地址),它暴露了机器的物理地址且时间戳可预测,存在安全风险。
- UUID 的"唯一"是概率性的,理论上可能重复但概率极低(约 10⁻³⁷),实际可视为绝对唯一。
常见问题
Q:UUID v4 和 v1 有什么区别?
A>v1 基于时间戳和 MAC 地址生成,有序但暴露机器信息。v4 完全随机生成,无信息泄露风险但无序。v7 是最新标准,结合时间戳(有序)和随机数(安全),是数据库主键的最佳选择。大多数场景使用 v4 即可。
Q:UUID 会重复吗?
A>理论上可能但概率极低。UUID v4 有 2^122 种可能,每秒生成 10 亿个 UUID,持续 100 年,碰撞概率仍低于 10⁻¹⁸。这比宇宙射线导致内存位翻转的概率还低。实际应用中可以安全地认为 UUID 不会重复。
Q:UUID 作为数据库主键有什么性能问题?
A>UUID v4 是随机值,插入 B-Tree 索引时会导致随机 IO(非顺序插入),在高并发写入场景性能不如自增 ID。解决方案:使用 UUID v7(时间有序)、使用雪花算法(Snowflake ID)、或将 UUID 存储在单独的 UNIQUE 列,主键仍用自增 ID。
Q:如何在 JavaScript 中生成 UUID?
A>现代环境:crypto.randomUUID()(浏览器、Node.js 16+、Deno)。兼容方案:安装 uuid 库 npm install uuid,使用 import { v4 as uuidv4 } from 'uuid'。不推荐自己用 Math.random() 实现,因为不够随机。
Q:UUID 和自增 ID 应该怎么选?
A>单机小型应用用自增 ID(简单高效)。分布式系统、需要全局唯一性的场景用 UUID v7 或雪花 ID。需要对外暴露 ID 且不暴露数量的场景用 UUID(自增 ID 暴露了业务量)。很多项目组合使用:自增 ID 做内部主键,UUID 做外部标识。