UUID 生成器
即时生成随机 UUID(v4)。
格式
生成的 UUID
6697e8aa-533c-4b02-b586-2e3a82a475b2 0576c7a5-449e-4ed2-8c40-6dcae4e6e7f9 ca7121aa-d4f4-45ed-a021-93b44859653b f3204cb4-93d9-4e25-8bfb-20ed778db25f 70905ad4-e3ea-4bdb-81f4-e5866b9f64c9 UUID 生成器按批次创建版本 4 通用唯一标识符,一次最多 100 个,支持输出大写和去掉连字符的格式,并可一键复制或下载为文本。它面向需要为数据库行、API 资源、文件和测试夹具创建标识符的开发者——无需编写脚本,也不必信任可能记录生成结果的在线服务。每个值都由浏览器加密安全随机数生成器在本地产生。
使用方法
- 选择要生成的数量,范围 1 到 100。每次点击”生成”都会产生一批全新的 UUID。
- 设置格式。 大写输出与去掉连字符是两个独立开关,可以精确匹配其他系统的存储形态。
- 生成。 所有值立即以列表形式出现。
- 复制或下载。 用每个值旁的按钮复制单个 UUID,用”全部复制”复制整批,或把整个列表下载为文本文件。
实操示例
示例 1——为数据库表填充种子数据。 一位开发者需要在迁移测试前准备 25 行占位数据。生成 25 个 v4 UUID 并粘贴进 SQL 插入脚本只需几秒,比手写循环快得多,也避免了合并多个环境数据时出现的自增主键冲突。
示例 2——为上传文件命名。 用原始文件名保存用户上传容易引发冲突和路径穿越问题。采用 uploads/<uuid>.jpg 这样的模式可以保证名称唯一且难以猜测。注意,唯一性本身并不等于安全:UUID 必须配合访问控制,因为任何知道该名称的人都能请求到文件。
示例 3——测试夹具。 一套测试需要为模拟用户准备看起来各不相同、但可复现的 ID。一次性生成一批并硬编码进夹具文件,可让测试保持可复现,而真实应用仍在运行时自行生成标识符。
UUID 各版本及选择建议
UUID 是 128 位的值,通常写成五组共 32 个十六进制数字:8-4-4-4-12。第三组的首位编码版本号。常见版本如下:
- v1——时间戳加上生成机器的 MAC 地址。有序,但会泄露硬件和时间信息。
- v3 / v5——对命名空间与名称做确定性哈希(MD5 / SHA-1)。相同输入永远得到相同的 UUID。
- v4——122 个随机位。无状态、不泄露任何信息,也是本工具生成的版本。
- v7——Unix 毫秒时间戳后接随机位,于 2024 年标准化。按创建时间排序,是数据库键的现代选择。
实务上的划分是:不会大量建索引的标识符用 v4,对写入吞吐和局部性敏感的新表主键用 v7。
比较格式之前先记住一个命名习惯:微软的世界把这些值称为 GUID,两个术语指的是同一种 128 位结构。Windows 工具生成的 GUID 与 UUID 在字节层面完全相同,差别只在约定俗成的文本格式和名称。如果文档或数据库列写的是 GUID,只要双方对连字符和字母大小写达成一致,生成的 UUID 就能适用。
v4 的随机性原理
在 128 位中,4 位固定用于标记版本,2 位用于标记变体,剩下 122 位随机。这就产生了上文中的碰撞概率。这些位的质量完全取决于来源:crypto.randomUUID() 和 crypto.getRandomValues() 取自操作系统的熵池,而基于 Math.random() 的简易生成器可能被可预测地播种,不适合用作绝不能碰撞的标识符。
常见错误与边界情况
- 把 UUID 当作密钥。 它是标识符。凭据和重置链接应使用专用令牌。
- 把 v4 用作聚集主键。 随机插入会碎片化索引。请存为 BINARY(16),新的高写入表优先用 v7。
- 格式不一致。 有的系统存大写,有的去掉连字符,有的区分大小写比较。比较或存储前先统一为一种表示。
- 以为”唯一”就是”已验证”。 唯一性是概率性的。对安全关键的场景,应保留数据库唯一约束,而不是单纯信任生成器。
- 在客户端生成并直接信任。 如果标识符跨越信任边界,应在服务端校验并重新签发;客户端可以发送任意字符串。
- 把 UUID 与 ULID 混为一谈。 ULID 是另一种 128 位方案,带有可排序的时间戳和更紧凑的 Base32 文本形式。需要转换时应有意识地处理,而不是当作可互换。
功能特点
- 每次点击最多批量生成 100 个 v4 UUID
- 通过 Web Crypto API 提供加密安全的随机性
- 可输出大写形式和去掉连字符的 32 字符形式
- 复制单个值或整个列表;下载为文本
- 可离线工作,无需账号,也无服务器往返
- 100% 客户端运行——生成的值永不外传
使用场景
- 数据库记录: 为分布式系统中的行提供唯一键。
- API 与资源: 在 URL 和负载中提供稳定标识符。
- 文件命名: 为上传和生成资源提供无冲突的名称。
- 测试: 为模拟对象、种子和示例数据提供夹具 ID。
- 分布式系统: 跨节点也不会冲突的标识符。
相关工具
常见问题
这里生成的 UUID 真的不会重复吗?
版本 4 的 UUID 携带 122 个随机位,理论上有约 5.3 × 10^36 种取值。要让人为生成的值出现碰撞的概率达到 50%,大约需要生成 2.7 × 10^18 个 UUID,远超任何现实工作负载。真正的风险不在数学,而在于随机源是否够强,因此本工具使用浏览器的 crypto.randomUUID,而不是伪随机函数。
可以输出大写或去掉连字符吗?
可以,两种选项都已内置。去掉连字符会得到 32 个字符的纯十六进制字符串,有些数据库更偏好这种形式;大写则适合会统一规范化标识符的系统。底层数值完全相同,按目标系统的要求选择即可。
可以把 UUID 当作密码重置令牌或 API 密钥吗?
不可以。UUID 是标识符,不是密钥。它会通过日志、URL、Referer 头和错误信息泄露,频率远超大多数人的预期,而且 v1/v6 UUID 还可能内嵌时间戳和机器标识。凭据应当单独生成随机令牌(来自 CSPRNG 的 256 位,用 base64url 编码),并配套过期时间和吊销机制。
我应该生成哪个版本的 UUID?
做通用标识符时,v4(本工具生成的版本)是无状态且安全的选择。如果该值要用作数据库主键,v7 通常更好,因为它的时间戳前缀能自然排序,让索引写入保持顺序。如果需要由名称推导出确定性 ID,请使用 v5,而不是随机生成。
为什么把 v4 UUID 当作主键会让数据库变慢?
因为 v4 完全随机,每次插入都会落在 B 树索引中的任意位置,而不是追加到末尾。随着表增长,这会造成页分裂、缓存未命中和索引碎片化。把值存为 BINARY(16) 而不是 CHAR(36) 能明显缓解,把新表改用按时间排序的 v7 UUID 则能从根本上消除该问题。
在这里生成 UUID 需要联网吗?
不需要。生成过程使用浏览器自带的 Web Crypto API,页面加载完成后即可离线工作。不会向服务器发送任何内容,生成的值也不会被保存——刷新页面即丢弃。
由 HandyTools Hub 团队审校 · 最后更新