UUID v7 生成器

在浏览器中批量生成 RFC 9562 标准的 UUID v7 ——前 48 位内嵌毫秒级时间戳,使 ID 可按生成顺序排序。支持标准、大写、无连字符、带花括号、URN 等多种格式,且可直接存入现有的 UUID 类型列。

UUID v7、UUID v4 与 ULID 的比较

形式 长度 是否可按生成顺序排序 与现有 UUID 类型列的兼容性 说明
UUID v7 36 个字符(含 4 个连字符) 是(前 48 位为毫秒级时间戳) 有(保持标准 UUID 类型、十六进制表示) 由 RFC 9562 标准化。由 Unix 时间戳与随机值组成,兼顾按时间顺序排序与既有 UUID 资产的兼容性。本工具生成的正是此格式。
UUID v4 36 个字符(含 4 个连字符) 否(完全随机) 有(标准 UUID 类型) 由 RFC 9562 标准化的完全随机 128 位标识符,不包含生成来源信息,是目前应用最广泛的形式。
ULID 26 个字符 是(前 10 个字符为时间戳) 无(使用 Base32,需额外的列类型转换) 独立于 UUID 标准(RFC 4122/9562)之外的 Crockford Base32 规范。比 UUID v7 更短,但无法直接存入原生 UUID 类型列。

使用小贴士

  • 生成的 UUID v7 全部在浏览器内通过 JavaScript(Web Crypto API)处理,不会发送到 toolbase.cc 的服务器。
  • UUID v7 的前 48 位是毫秒级 Unix 时间戳,因此只需按字符串排序即可还原生成时刻的先后顺序。
  • 可直接存入现有存放 UUID v4 的数据库列(如 CHAR(36) 或 PostgreSQL 的 uuid 类型),迁移时无需改动应用层的类型定义。
  • 「无连字符」格式便于用作 URL 路径段或文件名;「带花括号」格式则与 Windows COM/注册表中使用的 GUID 表示法一致。
  • 如果在 UUID v7 与 ULID(Crockford Base32、26 个字符)之间犹豫不决:现有系统已假定使用 UUID 类型列时选 UUID v7,追求更短字符串时选 ULID。

常见问题

最大的区别在于是否可按生成时间排序。UUID v4 是完全随机的 128 位值,无法按生成顺序排序;而 UUID v7 的前 48 位是毫秒级 Unix 时间戳,仅通过字符串比较就能得知生成顺序。

两者都可按生成时间排序,区别在于表示形式。UUID v7 可在保持与现有 UUID 类型列、库兼容的前提下迁移;而 ULID 是更短的独立 26 位字符 Crockford Base32 格式。若现有系统已假定 UUID 类型,选 UUID v7;若是新系统且希望字符更短,选 ULID 更合适。

于 2024 年 5 月正式作为 IETF RFC 9562 标准化。该规范在原有的 UUID v1 至 v5 基础上,新增了重排时间戳方式的 v6 与 Unix 时间戳方式的 v7。

适合。像 UUID v4 这样完全随机的值会导致新行在索引中的插入位置随机分布,容易造成 B-tree 索引碎片化;而 UUID v7 按时间顺序排列,新行往往被追加到索引末尾附近,从而提升插入性能。PostgreSQL 18 已内置 uuidv7() 函数,可见主流数据库对其的支持正在扩大。
ツールくん

闲话 ― UUID v7 如何把「时间」带回 UUID 家族

UUID v7 于 2024 年 5 月作为 IETF RFC 9562 标准化,这是自 2005 年最初的 RFC 4122 发布约二十年以来 UUID 规范的首次重大修订。此次修订新增了可排序的 v6、v7 变体,以及支持自定义字段的 v8,其背景正是 UUID v4 完全随机的特性长期以来被指出不利于数据库索引效率这一问题。

UUID v7 的设计与本站的姊妹工具 ULID 非常相似:两者都将毫秒级时间戳置于前部,其余部分以随机值填充。决定性的区别在于表示形式——ULID 采用独立于 UUID 标准之外的 26 位字符 Crockford Base32 格式,而 UUID v7 则延续了自 RFC 4122 以来的 36 位字符十六进制表示。正因如此,UUID v7 能够直接沿用既有的 UUID 类型列、库以及 API 规范而无需任何改动。

事实上,UUID v7 发布后不久便迅速获得主流数据库与语言运行时的支持。PostgreSQL 自 18 版本起内置了 uuidv7() 函数,其他主流语言与 ORM 中支持 v7 生成的库也在快速增加。「可按时间顺序排序」的便利性与「不破坏既有 UUID 资产」的兼容性能够兼得,正是 UUID v7 与 ULID 一同被迅速采纳的原因。