UUID 生成器 — 在浏览器中生成随机 UUID v4 标识符
生成 UUID v4、v1 和 v7 标识符。v4 使用密码学随机数,单击即可复制,支持批量生成,全部在浏览器中完成。
UUID(Universally Unique Identifier)以 8-4-4-4-12 的十六进制格式呈现,是软件中最具辨识度的模式之一。每个数据库表都有 UUID 列,每个 API 响应里都藏着 UUID,每个分布式系统都需要不依赖协调就能独立生成的标识符。这个标准经历过多次修订 —— 2005 年的 RFC 4122、2024 年的 RFC 9562 —— 当前推荐的 v7 版本解决了随机 UUID 导致 B-tree 索引碎片化的老问题:新插入会随机散落到索引页各处,而不是追加到末尾。
本生成器默认是 v4,因为 v4 仍是野外最常见的版本,但 v7 正在成为新标准。这种差异在 UUID 用作主键时最为关键。把 v4 UUID 插入聚集 B-tree 索引(MySQL InnoDB、以 UUID 为主键的 PostgreSQL)会造成页分裂和索引碎片化,因为下一次插入会落到随机位置。v7 UUID 把毫秒精度的时间戳放在高位,按时间顺序到达的插入会追加到同一索引页 —— 收益与自增整数相同,却省掉了中心化序列生成器的协调开销。如果 UUID 永远不需要按创建时间排序或建索引,v4 更简单,效果上没有区别。
最后的交接:如果需要查看已有的 UUID,本站的 UUID 解码器可以提取版本、变体和内嵌的时间戳。如果 UUID 要作为 jti 声明放进 JWT,JWT 解码器可以校验声明格式。如果需要确定性 UUID(同样输入始终产生同样 UUID),那就要用 v5 配合 SHA-1 哈希,这在浏览器里做不到 —— 这类场景请用 uuid 这个 npm 包,或 Python 的 uuid.uuid5()。
使用方法
选择 UUID 版本
默认是 v4(随机),也是数据库主键和 API 标识符最常用的版本。需要时间戳加 MAC 地址格式选 v1,要时间可排序的标识符选 v7(在 B-tree 索引中按自然顺序排列)。
按需生成数量
单击「生成」得到单个 UUID,或设置批量数量(最多 1000)一次性生成一批。每个 v4 UUID 通过 `crypto.getRandomValues` 获取密码学强度的随机数。列表以换行分隔的文本形式复制。
复制到剪贴板
点击任意生成的 UUID 可单独复制,也可以用「全部复制」复制整张列表。标准 36 字符连字符格式:`xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx`。
常见问题
数据库主键该用哪个 UUID 版本?
v7(时间有序、可排序)是数据库主键的最佳选择 —— 时间戳前缀让新行追加到 B-tree 索引末尾,避免了 v4 导致的页分裂。如果标识符不会被索引或数据库是键值型,v4 也够用。v1 由于 MAC 地址暴露带来的隐私问题,今天几乎不再是正确的选择。
生成的 UUID 是密码学随机的吗?
v4 UUID 使用 `crypto.getRandomValues()`,数据来自操作系统的熵源(Linux 上是 `/dev/urandom`,macOS 上是 `SecRandomCopyBytes`,Windows 上是 `BCryptGenRandom`)。TLS、SSH 密钥生成和会话令牌创建都使用同一来源。
需要生成多少个 UUID 才会大概率发生碰撞?
对于 v4,大概需要 2.71 × 10^18 个 UUID 才能达到 50% 的单次碰撞概率。每秒生成 10 亿个 UUID 持续 85 年,才会有约 50% 的概率出现一次碰撞。实际中限制因素是熵源的质量,而不是 UUID 的空间大小。
可以为 v1 UUID 指定自定义节点或命名空间吗?
v1 UUID 内嵌一个节点 ID(过去是 MAC 地址,现在出于隐私考虑做了随机化)。本生成器默认使用一个 48 位的随机值。部分 v1 实现允许指定自定义节点,但浏览器工具优先考虑隐私,只使用随机节点。
限制说明
- 不支持 v3 或 v5 生成v3(MD5 哈希)和 v5(SHA-1 哈希)UUID 需要一个命名空间 UUID 和一个名字字符串。本生成器没有实现命名空间哈希,因为使用场景(用于内容寻址的确定性 UUID)比较小众,哈希可以在外部完成。
- v1 时钟序列不会持久化v1 时钟序列在刷新页面时会重置,因为浏览器无法跨会话持久化状态。如果对 v1 UUID 的时钟序列单调性有要求,请改用服务端的 UUID 库。
- 不支持 UUID-as-base64 或短编码输出输出是标准的十六进制加连字符格式。如果需要紧凑编码(Base64、Base62),请手动编码 UUID 字节,或过一遍 Base64 编码工具。
平台说明
- macOS
- 终端里的 `uuidgen` 命令可以原生生成 v4 UUID。本浏览器工具增加了 v1 和 v7 的生成以及批量输出,适合给测试数据库灌种子数据或生成 fixture 文件。
- Linux
- `uuidgen` 命令(来自 util-linux 包)可生成 v4 UUID。新版本支持 `uuid -v7` 标志生成 v7 UUID。不想写 shell 循环做批量生成时,本浏览器工具是合适的选择。
- Web
- 完全在客户端运行。任何 UUID 都不会离开浏览器。适合开发中生成标识符、给测试数据库灌种子数据或生成 fixture 文件。