UUID v7 生成器

在线生成 UUID v7:可按时间排序,包含 48 位毫秒时间戳和 74 个随机位。

格式
生成结果
就绪,可在浏览器里生成 UUID v7。

这个 ID 的结构

结构
48 位 Unix 毫秒时间戳、version 7 位、RFC variant 位和随机填充。
本实现使用 74 个随机位;不包含单调计数器。
时间
包含。前 48 位编码生成时间,不同毫秒之间可按时间排序。
碰撞风险
同一毫秒内的碰撞取决于 74 个随机位;极高并发场景应使用协调式 ID 服务。
示例
01a044bc-57db-7b26-88e3-8292941941fe

你的 ID 会用浏览器里的强随机源本地生成,不会发送到 BroBroGo。

常见问题

为什么用 UUID v7 而不是 UUID v4?

UUID v7 保留 UUID 形态,但能按时间排序,对日志、数据库索引和事件流更友好。

UUID v7 会隐藏生成时间吗?

不会。时间戳就是 ID 的一部分。若需要不含时间的不透明 ID,用 UUID v4 或 NanoID。

UUID v7 生成器:时间排序的不可猜测标识符

为何需要 UUID v7

传统 UUID v4 完全随机生成,写入数据库时会导致 B‑tree 索引频繁分裂,降低插入性能。UUID v7 通过在标识符开头嵌入 48 位 Unix 毫秒时间戳,使得生成的 ID 按创建时间自然排序。这解决了索引局部性问题,同时保留 74 位随机位(共 128 位)保证不可猜测。本页面提供浏览器端本地生成,无需服务器参与,隐私安全。

页面功能与操作

用户可设置三个参数:

  • 数量:1 到 100 之间的整数。
  • 大写:切换 UUID 字母部分的大小写。
  • 包含连字符:控制输出是否带有标准格式的 4 个连字符。

任何参数变更都会立即重新生成全部 ID。生成的 ID 列表可逐个点击复制(单个复制),也可通过“复制全部”按钮将列表中所有 ID 一次性复制到剪贴板,状态栏会显示“已复制全部!”确认信息。页面初始状态显示“就绪”,生成后变为“已生成”。

UUID v7 的格式与排序特性

UUID v7 用 36 个字符表示,格式如 018f3a6e-1b2c-7d8e-9f0a-1b2c3d4e5f6。前 8 个字符(32 位)是时间戳的高 32 位,随后一个短横线,接着是 4 字符的时间戳中间 16 位,再后是一个版本位固定的 4 字符段(7 表示版本),然后是变体位和随机位,最后 12 字符为剩余随机部分。

时间戳精度为毫秒,因此同一毫秒内生成的多个 ID 不保证严格顺序。这与 ULID 类似,两者都按创建时间排序但允许同毫秒内乱序。相比之下,UUID v4 完全不排序,而 UUID v7 的排序特性大幅提升数据库写入性能。

生成原理与安全性

页面使用浏览器内置的 crypto.getRandomValues() 产生强随机数,完全在本地计算,绝不将数据发送到任何服务器。每个 UUID v7 的 74 位随机部分由浏览器生成,符合密码学安全要求。生成过程:

  1. 获取当前 Unix 毫秒时间戳(48 位)。
  2. 将时间戳填入前 48 位。
  3. 设置版本位(位 48-51 固定为 0111,即十六进制 7)。
  4. 设置变体位(位 64-65 固定为 10,遵循 RFC 9562)。
  5. 用随机位填充剩余 74 位。
  6. 按照 8-4-4-4-12 的分组规则加上连字符(除非用户选择移除)。
  7. 根据大写选项转换字母。

适用场景与典型用户

  • 分布式系统开发者:需要全局唯一且可按时间排序的键,用于事件溯源、消息队列、审计日志。
  • 数据库管理员:希望减少 UUID v4 带来的索引碎片,提升 InnoDB 或类似 B‑tree 引擎的写入吞吐量。
  • 安全工程师:要求标识符不可猜测,防止顺序枚举(时间戳部分虽然按顺序却无法预测,因为 ID 还包含随机位)。
  • 从 v4 迁移的团队:UUID v7 格式上兼容(同为 36 字符),但排序性质改进,无需更改现有存储字段长度。

与其他标识符格式的对比

特性 UUID v7 UUID v4 ULID NanoID
长度 36字符 36字符 26字符 21字符(默认)
排序性 时间排序(毫秒级) 不排序 时间排序(毫秒级) 不排序
时间精度 毫秒 毫秒
碰撞概率 极低(74位随机) 极低(122位随机) 极低(80位随机) 取决于长度
不可猜测性 可配置

常见问题

问:UUID v7 是否保证全局严格递增?
答:不保证。在同一毫秒内生成的 ID 可能不按生成顺序排列,因为排序仅依赖时间戳,而时间戳精度到毫秒。如果需要微秒级严格排序,应考虑其他方案(如 Snowflake)。

问:为什么生成时需要一个数量限制?
答:页面限制 1-100 个,避免一次性生成大量 ID 导致浏览器 UI 冻结。同时满足多数开发场景下批量测试的需求。

问:移除连字符后还是标准 UUID 吗?
答:连字符属于可选显示格式。标准的 UUID 文本表示包含连字符,但许多系统接受无连字符的 32 位十六进制字符串。本工具允许用户按需选择。

问:时间戳会溢出吗?
答:48 位 Unix 毫秒时间戳最大可表示约 8925 年后的时间,远超出当前计算机系统寿命,无需担心。

问:浏览器生成的随机数是否足够安全?
答:是的。crypto.getRandomValues() 使用操作系统提供的密码学安全随机源(如 Linux 的 /dev/urandom),适合生成 UUID v7 的随机部分。

问:为什么不在同一毫秒内添加序列号实现严格排序?
答:UUID v7 规范(RFC 9562)未强制要求序列号。如果需要严格排序,可在应用层添加单调计数器,但这会牺牲随机位的一部分。本工具遵循标准实现,保留最大随机性。