UUID v7 生成器

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

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

这个 ID 的结构

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

你的 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)未强制要求序列号。如果需要严格排序,可在应用层添加单调计数器,但这会牺牲随机位的一部分。本工具遵循标准实现,保留最大随机性。