跳到主要内容
PulsarKit

UUID生成器

批量生成UUID v4、v7和v1,一次最多10,000个;也可以解析现有的标识符,查看它的版本、变体和时间戳。

如何生成UUID

  1. 1

    选择UUID版本

    要纯随机就选v4,要按创建顺序排序的标识符就选v7,要经典的基于时间的结构就选v1。NIL和MAX给出两个保留的常量值。

  2. 2

    设置数量和格式

    一次最多生成10,000个。可选大写或小写、是否保留连字符,还可以给每个值加上引号、花括号或urn:uuid:前缀,直接粘贴进代码。

  3. 3

    复制列表或下载

    一次点击把生成的全部值复制到剪贴板,或把这一批下载为纯文本文件或CSV;v1和v7的批次带时间戳列。

为什么数据库主键正在从v4转向v7

v4 UUID是122位的纯随机数。一批v4插入数据库索引时,顺序完全不可预测,写入会分散在整个索引里,数据量大时影响性能。v7 UUID以48位毫秒时间戳开头,后生成的标识符总是排在先生成的后面。这样既有自增整数那样集中的写入位置,又保留了UUID的抗冲突能力和去中心化生成方式。即使在同一毫秒内,这个工具也用随机部分的高位作计数器,让v7批次保持单调递增。

为什么这里的v1从不包含MAC地址

1993年UUID v1的最初定义用网卡的MAC地址构成末尾48位,理由是没有两台电脑共用同一个地址。浏览器里拿不到这个地址;即使拿得到,在每一行数据库记录里嵌入真实的MAC地址,本身就是一种泄露设备信息、便于追踪的设计。这个生成器总是用随机字节填充这48位并设置多播位,完全符合RFC 9562的允许范围。这样v1按时间排序的好处还在,又不会暴露任何硬件标识符。

每个标识符都在本地生成

生成、格式化和解析都在当前标签页里用Web Crypto API完成。不向服务器发送任何内容,也不向浏览器存储写入任何内容。统计只会收到一个通用的“按钮已点击”事件,附带版本和数量,从不包含标识符本身。

常见问题

UUID v4和v7有什么区别?

v4是122位纯随机数,没有任何结构。v7用前48位存毫秒时间戳,所以一批v7值按创建顺序排列,适合作数据库主键,同时仍有足够的随机性避免冲突。

数据库主键什么时候该用v7而不是v4?

只要标识符要作主键或索引列,就用v7:它按时间排序,新行在索引里物理位置相近,插入速度明显快于v4键造成的随机分散。值不进索引时用v4,比如一次性令牌。

为什么这里的v1不包含MAC地址?

浏览器读不到设备的MAC地址;即使在浏览器之外,把它嵌入每个生成的标识符,也会泄露是哪台物理机器生成的。这个工具改用随机字节填充v1 UUID的这一部分,RFC 9562明确允许这样做。

UUID重复的概率有多大?

对v4来说,每秒生成十亿个UUID,持续约85年,出现一次冲突的概率才约为50%;实际中不会发生。v7和v1在随机数之外还加了时间戳,意外冲突的可能性更小。

UUID能当密码或访问令牌用吗?

不建议。v4 UUID确实有可观的随机性,但它的格式是可预测的,各种工具也默认它可以公开,这和需要保密的令牌不同。凡是需要保密的内容,请用专门的密码生成器。

NIL和MAX UUID有什么用?

NIL(全为0)是保留值,在很多系统里表示“无标识符”或“未设置”。MAX(全为1)定义得较晚,在范围查询中用作“大于任何真实UUID”的哨兵值。两者都不是随机生成的,而是固定常量。

随机性来自哪里?

来自Web Crypto API的crypto.getRandomValues;生成v4时,如果浏览器支持,直接用crypto.randomUUID。这个工具任何地方都不用Math.random。

解析UUID会把它发送到别处吗?

不会。解析器完全在浏览器中读取版本半字节、变体位,以及v1和v7里嵌入的时间戳。粘贴进来的值不会离开页面。

相关工具