HandyTools Hub

UUID 生成器

即时生成随机 UUID(v4)。

5
1 100

格式

生成的 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. 选择要生成的数量,范围 1 到 100。每次点击”生成”都会产生一批全新的 UUID。
  2. 设置格式。 大写输出与去掉连字符是两个独立开关,可以精确匹配其他系统的存储形态。
  3. 生成。 所有值立即以列表形式出现。
  4. 复制或下载。 用每个值旁的按钮复制单个 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 团队审校 · 最后更新