开发者工具 · 正则 / 字符串

UUID 生成

v1/v4/v5/v7/批量

本地处理 · 不上传 免费 · 无需登录 无次数限制 累计 51 次使用
朱砂位 = 版本 · 赤金位 = 变体
就绪
第一节

关于本工具

About

拉取容器镜像时,docker-compose.yml 里 services 下的 UUID 配错一个字母,整个集群就起不来。这个工具在浏览器里生成 v1(基于时间戳+MAC)、v4(随机)、v5(命名空间 SHA-1)、v7(时间有序)四种 UUID,支持单次或批量输出。所有计算走本地 JS,UUID 不会离开当前页面——适合写 Docker Compose、Kubernetes 清单时直接复制粘贴,或压测前批量生成测试标识。

使用场景

数据库主键冲突排查

后端在迁移旧系统时,发现两张表的自增主键撞了号,导致联表查询数据错乱。用本工具批量生成 100 个 UUID v4,替换掉冲突的整数字段,确保每条记录在全局唯一。v4 的随机性让新主键不会跟历史数据重号,且生成过程在浏览器本地完成,不经过任何服务器,避免敏感 ID 外泄。

分布式日志追踪ID分配

微服务集群里,一次用户请求穿过 6 个节点,每个节点各自打日志,排查问题时没法把散落的日志串起来。运维在网关层用本工具生成 UUID v7,塞进请求头传给下游。v7 按时间戳排序,日志按生成时间自然排好,不用额外写排序逻辑;批量生成 500 个耗时不到 10 毫秒,不拖慢接口响应。

API 接口幂等性令牌生成

支付回调接口偶尔因网络重试收到重复请求,如果没做幂等处理,用户可能被扣两次款。开发者在发起支付前,用本工具生成一个 UUID v1,作为幂等令牌传给后端。v1 基于网卡 MAC 和时钟序列生成,同一台机器不会重复,且生成时不依赖外部服务,即使数据库宕机也能在本地秒级拿到令牌。

文件版本唯一标识命名

设计团队每天导出几十版 UI 稿,文件名总是「首页_v2_最终版_真的最终版.png」,协作时经常搞混。用本工具给每版文件生成 UUID v5,基于项目名+版本号做命名空间哈希,同一项目同一版本始终产出相同 UUID,不同版本自动不同。这样文件名变成「a3f2c1-首页.png」,一眼看出是第几版,且不会跟其他项目撞名。

测试环境模拟数据去重

QA 在压测时需要生成 1 万条用户注册数据,但每次跑脚本都会因为主键重复而中断。测试人员用本工具批量生成 1 万个 UUID v4,直接粘贴到 SQL 插入语句里,替换自增 ID 字段。生成过程不联网,不触发任何 API 调用,1 万个 UUID 在 2 秒内完成,压测脚本一次跑通。

第二节

使用指南

Getting Started

使用步骤

  1. 1在「版本」下拉框选择 UUID 版本(v1/v4/v5/v7),v5 需额外输入命名空间与名称
  2. 2在「生成数量」输入框键入 1-1000 的整数,批量生成时自动编号输出
  3. 3点击「生成」按钮,结果区立即显示 UUID 列表,每行末尾带复制图标
  4. 4点任意 UUID 旁的复制图标,该值写入剪贴板并短暂高亮确认

输入输出示例

输入输出说明
版本 v1,数量 1550e8400-e29b-41d4-a716-446655440000常规:v1 基于时间戳和节点 MAC 生成,输出固定格式 36 字符,验证基本生成能力
版本 v4,数量 5["f47ac10b-58cc-4372-a567-0e02b2c3d479", "9c5b94b1-35ad-4e3e-8c2a-6b9f8e1d3a7c", "1a2b3c4d-5e6f-7890-abcd-ef1234567890", "b8c9d0e1-f2a3-4b5c-6d7e-8f9012345678", "e0f1a2b3-c4d5-6e78-9a0b-1c2d3e4f5a6b"]常规:v4 完全随机,批量 5 条输出数组,验证批量功能及无重复性
版本 v5,命名空间 URL "https://example.com",名称 "test"d8b3c4a5-6e7f-8901-bcde-f12345678901常规:v5 基于命名空间和名称的 SHA-1 哈希,相同输入始终输出相同 UUID,验证确定性
版本 v7,数量 1018f3a5b-6c7d-8e9f-a0b1-c2d3e4f5a6b7边界:v7 基于 Unix 时间戳(毫秒)排序,输出前 12 位为时间戳,验证时间有序性
版本 v4,数量 0[]边界:数量为 0 时返回空数组,验证输入校验(非 1 时返回数组而非对象)
版本 v1,数量 100["550e8400-e29b-41d4-a716-446655440001", "550e8400-e29b-41d4-a716-446655440002", ...](共 100 条,输出为 JSON 数组)边界:批量上限 100,验证大数量生成性能及输出格式一致性
版本 v4,数量 1(输入版本号写成 "V4" 大写)错误:版本号无效,支持 v1/v4/v5/v7易错:版本号大小写敏感,大写 V4 不被识别,需提示用户使用小写
版本 v5,命名空间 UUID "550e8400-e29b-41d4-a716-446655440000",名称 ""(空字符串)f47ac10b-58cc-4372-a567-0e02b2c3d479易错:名称可为空字符串,但用户可能误以为必填;输出仍为有效 UUID,验证空名称处理

常见错误对照

1.UUID v5 的命名空间和名称输入错误

✗ 错误namespace: "DNS", name: "example.com"
✓ 修复namespace: "6ba7b810-9dad-11d1-80b4-00c04fd430c8", name: "example.com"

UUID v5 要求 namespace 是 UUID 格式(如 DNS 的固定 UUID),不是字符串 'DNS'。RFC 4122 规定 namespace 必须是 128 位 UUID,否则输出结果与标准不一致。

2.批量生成时混用不同版本 UUID 的格式

✗ 错误同时生成 v4 和 v7,但输出时未区分版本标识位
✓ 修复分别生成:v4 输出 550e8400-e29b-41d4-a716-446655440000,v7 输出 018f3a6e-1b7c-7b00-8000-000000000000

UUID v4 版本位固定为 4,v7 版本位固定为 7,变体位也不同。混用不标注会导致下游系统无法按版本解析时间戳或随机性。

3.UUID v7 的时间戳精度理解错误

✗ 错误认为 v7 时间戳精确到纳秒,直接用于排序
✓ 修复v7 时间戳为毫秒级(Unix 毫秒),排序时同毫秒内按随机位排序

UUID v7 的 48 位时间戳基于 Unix 毫秒,不是微秒或纳秒。同毫秒内生成的多个 UUID 靠随机位(74 位)保证顺序,不能依赖时间戳区分先后。

4.UUID v1 的 MAC 地址和时钟序列未正确处理

✗ 错误生成 v1 时直接使用随机 MAC 地址,不设置时钟序列
✓ 修复使用真实 MAC 地址(如 00:1A:2B:3C:4D:5E),时钟序列初始化为 0,并记录上次时间戳

UUID v1 依赖 MAC 地址保证全局唯一性,RFC 4122 要求时钟序列在时间回拨时递增。随机 MAC 且无时钟序列管理,可能导致重复或违反规范。

5.批量生成时未考虑 UUID 版本间的长度差异

✗ 错误批量导出时所有版本都按 36 字符处理,忽略 v4/v5/v7 的固定格式
✓ 修复所有标准 UUID 均为 36 字符(含连字符),v1/v4/v5/v7 格式一致,无需特殊处理

所有标准 UUID 版本(v1/v4/v5/v7)输出格式固定为 8-4-4-4-12 共 36 字符。版本差异仅在位布局和生成算法,不影响长度。

6.UUID v5 的 SHA-1 哈希输出截断理解错误

✗ 错误认为 v5 直接输出 SHA-1 的 160 位哈希
✓ 修复v5 对 namespace 和 name 做 SHA-1 后,截取 128 位并设置版本/变体位

UUID v5 使用 SHA-1 生成 160 位哈希,但只取前 128 位,再强制设置版本位(5)和变体位(10xx)。直接输出完整 SHA-1 会得到 20 字节而非 16 字节。

7.UUID v4 的随机数生成器选择不当

✗ 错误使用 Math.random() 生成 v4 的随机位
✓ 修复使用 crypto.getRandomValues() 或 /dev/urandom 生成 122 位随机数

Math.random() 是伪随机且可预测,不满足 UUID v4 对密码学安全随机数的要求。RFC 4122 要求 v4 的随机位必须不可预测,否则可能被枚举。

第三节

工作原理

How It Works

核心公式

UUID = 时间戳(60bit) + 时钟序列(14bit) + 节点(48bit) [v1] / 随机位(122bit) [v4] / 命名空间+名称的SHA-1哈希(160bit) [v5] / 时间戳(48bit) + 随机位(74bit) [v7]

变量说明

  • 时间戳100纳秒间隔的UTC时间,60bit
  • 时钟序列防时钟回拨,14bit
  • 节点MAC地址或随机,48bit
  • 随机位加密安全随机数,122bit(v4)或74bit(v7)
  • SHA-1哈希命名空间+名称的160bit摘要

示例

生成v4 UUID:随机生成122bit(如0x3a1b...),拼接版本位0100(4)和变体位10,得32位十六进制:3a1b2c3d-4e5f-6789-abcd-ef0123456789。

选择版本生成时间戳生成随机数拼接 UUID批量输出
用户操作 本地生成 拼接处理
第五节

常见问题

Q & A
批量生成 UUID,一次最多能生成多少个?会不会卡死浏览器?

本工具是纯前端实现(FE),所有计算在浏览器本地完成,不经过服务器。批量生成数量没有硬性限制,但生成 10 万个以上时,页面渲染和内存占用会明显增加,可能导致浏览器卡顿或标签页崩溃。建议单次生成不超过 1 万个,既保证速度,也避免浏览器无响应。如果确实需要大批量,可分多次生成后自行合并。

v1、v4、v5、v7 这几种 UUID 到底有什么区别?我该选哪个?

v1 基于时间戳和 MAC 地址生成,相同机器短时间内的 UUID 前缀相似,适合需要排序或追踪来源的场景。v4 是完全随机生成,碰撞概率极低,是最通用的选择。v5 需要输入一个名字空间和一个名称,对同一输入总是生成相同 UUID,适合做内容寻址。v7 是较新的版本,带时间戳前缀且随机后缀,比 v1 更安全(不暴露 MAC),同时保持可排序。日常开发选 v4 最省心,需要可排序或可重复生成时选 v1 或 v7。

v5 的命名空间和名称是干嘛的?我随便填行不行?

命名空间(namespace)是一个预先定义的 UUID,比如 DNS 命名空间是 6ba7b810-9dad-11d1-80b4-00c04fd430c8,名称是你想标识的具体字符串(如域名)。v5 的算法会把这俩值做哈希,保证相同的命名空间+名称组合永远生成同一个 UUID。如果随便填,你将失去“可重复性”,因为别人用同样的名称但不同的命名空间会得到不同结果。建议参考 RFC 4122 的预设命名空间(DNS、URL、OID、X.500),除非你有自定义需求。

生成的 UUID 能确保全球唯一吗?万一和别人的重复了怎么办?

v4 UUID 有 122 位随机数,理论碰撞概率极低:每秒生成 10 亿个,持续 100 年,重复概率约 50%。v1 和 v7 依靠时间戳+唯一标识,在单台机器上不会重复。全球范围看,v4 的随机性足够强,实际应用中几乎不会发生碰撞。如果仍然担心,可选用 v5 并自定义命名空间(比如用你的域名作为名称空间),这样你的业务系统内生成的 UUID 完全由你控制,不存在外部碰撞。

为什么我批量生成的 UUID,v1 版本前面几位看起来都一样?

v1 UUID 的前 8 位(时间戳的低位)在短时间内变化很小,如果一次批量生成间隔毫秒级,这些位确实可能相同。这是 v1 的正常行为:它的时间戳部分精度到 100 纳秒,但实际生成时受操作系统时钟精度限制,同一毫秒内产生多个 UUID 时,时间戳部分会重复,靠时钟序列和节点字段保证唯一性。如果介意视觉上的重复,改用 v4 或 v7;v7 虽然也有时间戳前缀,但后缀随机性更强,视觉上更分散。

这个工具生成的 UUID 会不会被上传到服务器?离线能用吗?

完全离线可用。本工具是纯前端实现(FE),UUID 生成逻辑在浏览器中用 JavaScript 完成,不会向任何服务器发送数据。即使断网,页面加载后也能正常使用。v4 的随机数来自浏览器内置的 crypto.getRandomValues(),v1/v7 的时间戳来自本地系统时钟,全部在本地计算。隐私敏感场景(如生成密钥相关 UUID)可以放心使用。

生成的 UUID 带不带横杠?怎么去掉?

默认生成的是标准格式,带 4 个连字符(如 550e8400-e29b-41d4-a716-446655440000)。如果数据库或接口需要 32 位纯十六进制字符串(无横杠),本工具在结果展示区提供了“复制无横杠版”按钮,或者复制后手动用替换功能去掉 - 即可。注意:v1 和 v7 的时间戳部分带横杠时更易读,但纯 32 位格式对存储更友好。

v7 和 v1 都有时间戳,为什么说 v7 更安全?

v1 的节点字段使用了机器 MAC 地址(48 位),这会暴露设备的物理硬件标识。如果你在公共代码或日志中泄露 v1 UUID,别人可以反推出你的网卡厂商甚至具体设备。v7 虽然也包含时间戳,但后缀是随机生成的(48 位随机数),不携带任何硬件信息,既保留了按时间排序的能力,又避免了 MAC 地址泄露风险。因此在新系统中推荐优先使用 v7(如果支持),而不是 v1。

隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。

选择 打开 +新窗口 esc关闭