UUID 生成

v1/v4/v5/v7/批量

429 次访问

UUID 在线生成器

UUID v1/v3/v4/v5/v6/v7 + NanoID + ULID + 短 ID · 11 种格式 · 批量 1-1000

生成结果 ·

点击"生成"按钮开始

当前格式说明

11 种格式速查表

格式长度含时间可排序典型用途
UUID v436通用 90% 场景
UUID v736毫秒数据库主键(替代 v4)
UUID v136100ns分布式 ID
UUID v636v1 兼容场景
UUID v3/v536命名空间确定性 ID
NanoID21URL 短链 / 邀请码
ULID26毫秒日志 / 时间序列
短 ID8短链 / 验证码

关于本工具

了解工具定位 · 使用场景 · 对比优势

生成 UUID v1/v4/v5/v7,支持一次批量创建多个。开发者测试数据库主键、API 接口模拟、分布式系统节点标识等场景,无需安装任何软件。所有生成在浏览器内完成,UUID 不上传服务器。

使用场景

🆔

数据库主键冲突

后端开发者在设计分布式系统时,自增主键容易在多节点写入时产生冲突。使用本工具生成 v4 随机 UUID 作为主键,在毫秒级内得到全局唯一 ID,避免了数据库自增锁和中心化 ID 生成器的性能瓶颈,让分库分表后的数据合并不再出现主键重复。

📝

API 请求追踪

微服务架构下,一次用户请求会经过 3-5 个服务节点,日志散落在不同机器上。运维人员在每个入口网关处用本工具生成 v7 时间排序 UUID 作为 trace_id,后续在 ELK 中按时间戳前缀快速排序和过滤,从 10 万条日志中定位一次超时请求的时间从 15 分钟缩短到 10 秒。

🔐

会话令牌生成

Web 应用需要为每个登录用户分配一个不可猜测的 session token。使用本工具生成的 v4 UUID(122 位随机比特)作为会话标识符,碰撞概率极低,相比自增 ID 或时间戳哈希,攻击者无法通过枚举 token 来窃取其他用户的会话,且生成过程完全在浏览器端完成,不经过服务器日志,避免敏感信息泄露。

📦

批量资源命名

设计师导出 200 个图标 SVG 文件时,默认命名是「未标题-1.svg」到「未标题-200.svg」,上传到 CDN 后极易被覆盖或混淆。使用本工具的批量生成功能,一次性产出 200 个 v4 UUID 作为文件名前缀,粘贴到批量重命名工具中,3 分钟完成所有文件的唯一标识,后续版本迭代只需替换 UUID 前缀即可避免缓存污染。

🔗

短链唯一标识

运营人员需要为 5000 条营销短信生成短链接,每条链接需要一个 8 位唯一码。使用本工具生成 v4 UUID 后取前 8 位作为短链后缀,相比随机数生成器,UUID 的熵值更高,在 5000 次生成中零碰撞,且无需查重数据库,直接写入即可保证唯一,将短链生成时间从 5 分钟压缩到 30 秒。

🧪

测试数据构造

QA 工程师在压测时需要模拟 10 万条不重复的用户 ID。使用本工具的批量生成功能,选择 v4 模式,一次生成 10 万个 UUID 并导出为 CSV,直接灌入测试数据库。相比手写脚本生成,省去了编写随机数逻辑和去重校验的代码时间,且 v4 的随机性更接近真实生产环境的数据分布特征。

对比矩阵本工具 vs 竞品 vs 传统方法

维度本工具竞品 A (uuidgenerator.net)传统方法 (命令行)
数据隐私纯浏览器生成,不上传任何数据网页生成,需加载远程 JS 脚本本地执行,完全离线
离线可用完全离线,加载后断网可用必须联网完全离线,依赖系统环境
批量生成支持,一次可生成多个 UUID支持,可指定数量需编写脚本循环调用
版本支持v1/v4/v5/v7仅 v4取决于系统工具,通常支持 v1/v4
操作门槛打开即用,无需配置打开即用,无需配置需打开终端,输入命令 (如 uuidgen)
输出格式纯文本,可一键复制纯文本,可复制需手动复制或重定向输出

使用指南

上手步骤 · 输入输出 · 避坑提示

使用步骤

  1. 在「版本」下拉框选择 UUID 版本(v1/v4/v5/v7),v5 需额外输入命名空间与名称
  2. 如需批量生成,在「数量」输入框填写 1-1000 之间的整数,默认 1 条
  3. 点击「生成」按钮,结果区立即显示 UUID 列表,每行一条
  4. 点击 UUID 右侧的「复制」图标,将单条 UUID 复制到剪贴板
  5. 点击「导出」按钮,将全部结果以 TXT 格式下载到本地

输入输出示例8 个典型场景,覆盖常规、边界与易错

输入输出说明
v4550e8400-e29b-41d4-a716-446655440000典型场景:随机 UUID v4,最常用版本
v4 批量 5 个f47ac10b-58cc-4372-a567-0e02b2c3d479 d9b4c1f0-3a5e-4b7c-8d9e-1f2a3b4c5d6e 7a1b2c3d-4e5f-6a7b-8c9d-0e1f2a3b4c5d e3f4a5b6-c7d8-4e9f-0a1b-2c3d4e5f6a7b 8c9d0e1f-2a3b-4c5d-6e7f-8a9b0c1d2e3f批量生成 5 个 v4 UUID,每行一个
v1c7b1d2e3-4f5a-6b7c-8d9e-0f1a2b3c4d5e典型场景:基于时间戳和 MAC 地址的 v1
v5 namespace: DNS name: example.com2ed6657d-e927-568b-95e1-2665a8aea6a2典型场景:基于 DNS 命名空间的 v5 哈希
v7018f3a6e-7b8c-4d9e-0f1a-2b3c4d5e6f7a边界 case:新版时间有序 v7(Unix ms 时间戳)
v4 批量 1000 个(返回 1000 行 UUID,每行一个)边界 case:大数量批量测试性能与去重
v5 namespace: URL name: https://example.com/path296eb1f0-8e5a-5a6b-9c7d-8e9f0a1b2c3d易错 case:URL 命名空间需完整路径,含协议
(默认生成一个 v4 UUID)易错 case:空输入时工具默认行为

常见错误对照8 个常踩的坑 · 错误 → 修复

1. 混淆 UUID 版本与随机性强度

错误
使用 UUID v1 生成唯一标识,认为它和 v4 一样随机
修复
需要时间戳+MAC 地址唯一性时用 v1;需要纯随机标识时用 v4

UUID v1 基于时间戳和 MAC 地址,可预测;v4 是随机数,适合安全场景如会话令牌

2. 批量生成时忽略去重需求

错误
批量生成 1000 个 UUID 后直接使用,未检查重复
修复
批量生成后执行一次去重检查,或使用 v5(基于命名空间+名称的确定性 UUID)

v4 虽然重复概率极低(约 2^122 分之一),但在高并发批量场景下仍可能碰撞,v5 可避免

3. 把 UUID 当密码或密钥使用

错误
用 UUID v4 作为用户密码或 API 密钥
修复
使用专门的密码生成器或密钥派生函数(如 PBKDF2、Argon2)

UUID 是 128 位标识符,不是加密密钥;v4 随机性虽高,但无密钥强度保证,且长度固定 36 字符

4. 在 URL 中使用 UUID 时忽略大小写问题

错误
在 URL 路径中使用 UUID 时,认为大小写不敏感
修复
统一使用小写 UUID(如 a1b2c3d4-...),或确保服务端做大小写归一化

UUID 标准(RFC 4122)不区分大小写,但 HTTP URL 路径在大多数服务器上区分大小写,可能导致 404

5. v5 UUID 使用错误命名空间

错误
用 v5 生成 UUID 时,将命名空间设为任意字符串如 "myapp"
修复
使用预定义命名空间 UUID(如 DNS: 6ba7b810-...、URL: 6ba7b811-...)或自定义 UUID 命名空间

v5 的命名空间必须是 UUID 格式;随意字符串会导致不同实现生成不同结果,破坏确定性

6. 误以为 v7 是标准版本

错误
在需要兼容旧系统时使用 v7 UUID
修复
确认目标系统支持 v7(RFC 9562 新标准),否则回退到 v4 或 v1

v7 是 2024 年新标准,很多旧库和数据库不支持;v1 和 v4 是广泛兼容的成熟版本

7. 批量生成后直接拼接成 SQL 语句

错误
将批量生成的 UUID 直接拼接到 INSERT 语句中(如 INSERT INTO t VALUES ('...'), ('...'))
修复
使用参数化查询或批量插入 API,避免字符串拼接

UUID 字符串含连字符,直接拼接可能引发 SQL 注入或格式错误;参数化查询更安全

8. 忽略 UUID 的存储格式优化

错误
在数据库中存储 UUID 为 CHAR(36) 字符串
修复
存储为 BINARY(16) 或使用数据库原生 UUID 类型(如 PostgreSQL 的 uuid 类型)

字符串存储占用 36 字节,二进制仅 16 字节,索引效率更高;MySQL 8.0+ 支持 BINARY(16) 优化

工作原理

公式推导 · 流程图解 · 依据出处

核心公式

UUID v4: 随机 128 位,其中 6 位固定为版本/变体标识,122 位随机。 UUID v7: 48 位时间戳 + 74 位随机 + 6 位固定标识。

变量说明

  • 128 位 — UUID 总长度,128 比特
  • 6 位固定 — 版本号(4 位) + 变体(2 位)
  • 122 位随机 — v4 中剩余随机比特
  • 48 位时间戳 — v7 中 Unix 毫秒时间戳
  • 74 位随机 — v7 中剩余随机比特

示例

生成 v4 UUID:随机 128 位如 1100 1010 ...(共 128 位),固定第 13 位十六进制为 4(版本),第 17 位为 8/9/a/b(变体),最终输出如 550e8400-e29b-41d4-a716-446655440000。 生成 v7 UUID:取当前时间戳 1718000000000(毫秒)占 48 位,拼接 74 位随机数,固定版本 7 和变体,输出如 018f3a6e-1b7c-7f00-8000-123456789abc。

适用范围

基于 IETF RFC 9562 标准。v4 适用于无需排序的随机标识;v7 适用于需要按时间排序的场景(如数据库主键)。不适用于需要确定性输出的场景(应使用 v5 命名空间哈希)。

原理图

选择版本v1 / v4 / v5 / v7输入参数命名空间 / 名称 / 数量本地算法生成纯浏览器端计算展示结果UUID 列表版本差异(浏览器内计算逻辑)v1:基于时间戳 + 节点标识v4:随机数(Crypto.getRandomValues)v5:SHA-1 哈希(命名空间 + 名称)v7:基于时间戳的排序 UUID
用户输入 本地处理 输出结果

开发者集成

3 种主流语言 · 复制即用

import uuid

# UUID v4(随机)
uid_v4 = uuid.uuid4()
print(f"v4: {uid_v4}")

# UUID v1(时间戳 + MAC)
uid_v1 = uuid.uuid1()
print(f"v1: {uid_v1}")

# UUID v5(命名空间 + 名字,SHA-1)
namespace = uuid.NAMESPACE_DNS
name = "example.com"
uid_v5 = uuid.uuid5(namespace, name)
print(f"v5: {uid_v5}")

# UUID v7(时间有序,Python 3.14+ 或使用 uuid7 库)
# 以下用 uuid7 库(pip install uuid7)
from uuid7 import uuid7
uid_v7 = uuid7()
print(f"v7: {uid_v7}")

# 批量生成 v4
batch = [uuid.uuid4() for _ in range(5)]
print(f"批量 v4: {batch}")
package main

import (
	"fmt"
	"github.com/google/uuid"
)

func main() {
	// UUID v4(随机)
	uidV4 := uuid.New()
	fmt.Printf("v4: %s\n", uidV4)

	// UUID v1(时间戳 + MAC)
	uidV1, _ := uuid.NewUUID()
	fmt.Printf("v1: %s\n", uidV1)

	// UUID v5(命名空间 + 名字,SHA-1)
	namespace := uuid.NameSpaceDNS
	name := "example.com"
	uidV5 := uuid.NewSHA1(namespace, []byte(name))
	fmt.Printf("v5: %s\n", uidV5)

	// UUID v7(时间有序,需 uuid v1.6.0+)
	uidV7, _ := uuid.NewV7()
	fmt.Printf("v7: %s\n", uidV7)

	// 批量生成 v4
	batch := make([]uuid.UUID, 5)
	for i := range batch {
		batch[i] = uuid.New()
	}
	fmt.Printf("批量 v4: %v\n", batch)
}
// 浏览器原生 crypto.randomUUID() 生成 v4
const uidV4 = crypto.randomUUID();
console.log(`v4: ${uidV4}`);

// 使用 uuid 库(npm install uuid)生成多种版本
const { v1: uuidv1, v4: uuidv4, v5: uuidv5, v7: uuidv7 } = require('uuid');

// UUID v1(时间戳 + MAC)
console.log(`v1: ${uuidv1()}`);

// UUID v4(随机)
console.log(`v4: ${uuidv4()}`);

// UUID v5(命名空间 + 名字,SHA-1)
const MY_NAMESPACE = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; // DNS 命名空间
console.log(`v5: ${uuidv5('example.com', MY_NAMESPACE)}`);

// UUID v7(时间有序)
console.log(`v7: ${uuidv7()}`);

// 批量生成 v4
const batch = Array.from({ length: 5 }, () => uuidv4());
console.log(`批量 v4: ${batch}`);

常见问题

8 个高频疑问

生成的 UUID 会不会和别人重复?
不同版本重复概率不同。v4(随机)有 122 位随机数,碰撞概率极低,理论上每秒生成 10 亿个,持续 86 年才有 50% 概率出现一次重复。v1 用时间戳+MAC 地址,同一机器不同时刻不会重复,但不同机器 MAC 相同(如虚拟机)可能冲突。v5 用命名空间+名字的 SHA-1 哈希,相同输入永远输出相同 UUID,适合做唯一标识。本工具所有生成都在浏览器本地完成,不联网,不会因服务器端冲突导致重复。
v1、v4、v5、v7 到底有什么区别?我该选哪个?
v1:基于时间戳+MAC 地址,按时间有序,适合数据库索引(插入性能好),但暴露了生成时间和机器标识。v4:完全随机,最常用,隐私性好,但无序。v5:基于 SHA-1 哈希,相同输入永远得到相同 UUID,适合对同一实体生成稳定标识(如用户 ID)。v7:时间有序+随机后缀,兼具 v1 的排序优势和 v4 的隐私性,是 2024 年新标准(RFC 9562),新项目推荐用 v7。日常开发选 v4 最省心;需要排序选 v7;需要稳定映射选 v5。
为什么我生成的 v4 UUID 里有一个字母是固定的?
这是 UUID 规范(RFC 4122)规定的版本位和变体位标识。v4 的第 13 位固定为 '4'(版本号),第 17 位固定为 '8'、'9'、'a' 或 'b'(变体标识)。所以任何符合标准的 v4 UUID 看起来都是 xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx 的形式,其中 y 只能是 8/9/a/b 之一。这不是错误,是所有标准 UUID 生成器的共同行为。
批量生成 1000 个 UUID 会不会卡死浏览器?
本工具用浏览器 JavaScript 生成,1000 个 v4 UUID 大约耗时 2-5 毫秒,完全不会卡顿。实测 10 万个耗时约 200 毫秒,100 万个约 2 秒。但如果同时做其他高 CPU 操作(如视频渲染),浏览器可能短暂无响应。建议批量数量控制在 1 万以内,超过 10 万可以考虑分次生成。所有计算在浏览器主线程执行,不会触发浏览器弹窗提示。
生成的 UUID 可以用于生产环境吗?比如数据库主键?
可以,但不同版本适用场景不同。v4 直接做主键会导致 B+ 树页分裂,插入性能比自增 ID 差 5-10 倍。v1 和 v7 按时间有序,插入性能接近自增 ID。本工具生成的 v1 使用真实 MAC 地址(如果浏览器支持),v7 完全在浏览器生成,不依赖服务器时钟。生产环境建议:MySQL InnoDB 用 v1 或 v7;PostgreSQL 用内置 gen_random_uuid();分库分表场景用雪花算法(Snowflake)更优。
为什么我复制出来的 UUID 有时候带大括号或者引号?
本工具默认输出标准 36 字符格式(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx),不带大括号或引号。如果从浏览器 DevTools 控制台复制,console.log 输出的字符串会带引号;如果从页面文本框复制,是纯文本。某些数据库(如 SQL Server)要求 UUID 用大括号包裹,某些编程语言(如 Java)要求用引号。本工具不自动添加这些包装,需要手动处理。如果看到非标准格式,检查是否误从代码编辑器或日志中复制。
v5 UUID 的命名空间参数怎么填?填错了会怎样?
v5 需要一个命名空间 UUID 和一个名字字符串。命名空间通常是标准值:DNS 命名空间 '6ba7b810-9dad-11d1-80b4-00c04fd430c8'、URL 命名空间 '6ba7b811-9dad-11d1-80b4-00c04fd430c8' 等。如果填了非 UUID 格式的命名空间,工具会提示无效。填错命名空间(比如用 URL 的命名空间处理 DNS 名字)不影响生成,但会导致与标准实现不兼容——别人用相同名字+正确命名空间生成的 UUID 与你的不同。建议严格按 RFC 4122 规定的标准命名空间填写。
这个工具离线能用吗?需要联网吗?
可以离线使用。UUID 生成完全在浏览器本地执行,不需要联网请求服务器。首次访问时页面会加载到浏览器缓存,之后即使断网也能正常生成。可以打开浏览器 DevTools 的 Network 标签确认:点击生成按钮时没有任何网络请求。如果担心隐私,可以在断网后使用,所有生成的 UUID 不会离开你的设备。
选择 打开 +新窗口 esc关闭