使用方法
- 在类型中选择标识符的种类,并在数量中设定所需的个数。
- 若选择 Nanoid,请设定其长度,以及字符集中的字符。
- 从生成的标识符中复制一个标识符。每一行给出该标识符所含的时间;Nanoid 则显示一个破折号。
- 将 ULID 或 UUID 版本7粘贴到读取其中的时间中,即可读出其中的时间。
三种标识符
ULID(ulid/spec)为128位:先是48位的 Unix 毫秒时间,然后是80位随机数,写作26个 Crockford base32 字符。UUID 版本7(RFC 9562 第5.7节)同样以48位毫秒时间开头,采用 UUID 的8-4-4-4-12形式。Nanoid 是按您选择的长度和字符集生成的随机字符串,不含时间。
- ULID:26个字符,例如01ARZ3NDEKTSV4RRFFQ69G5FAV
- UUID 版本7:36个字符,例如017f22e2-79b0-7cc3-98c4-dc0c0c07398f
- Nanoid:任意长度、任意字符集,不含时间
同批生成时的顺序
同一批生成的标识符共享同一毫秒。ULID 的随机部分会在上一个标识符的基础上加一,UUID 版本7则使用一个12位计数器,因此这些标识符会按生成的顺序排列(ulid/spec 的单调性一节;RFC 9562 第6.2节)。在同一毫秒之内,Nanoid 不排序:每一个都是重新抽取的。
随机值来自 crypto.getRandomValues,即浏览器自身的随机字节来源。Nanoid 逐个字符抽取且无偏差,会跳过那些会偏向某些字符的字节值。
计算示例:读取 ULID 的时间
粘贴01ARZ3NDEKTSV4RRFFQ69G5FAV(规范中的示例 ULID),结果为:时间为2016年7月30日23:54:10 UTC,即1970年1月1日之后的1,469,922,850,259毫秒。
前十个字符01ARZ3NDEK 包含时间。最后的十六个字符包含80位随机数,因此该标识符可以像普通文本一样按其时间排序。
常见问题
ULID 与 UUID 相同吗?
ULID 与 UUID 一样为128位,但它以26个 Crockford base32 字符书写,并不是 UUID 格式。UUID 版本7是以时间开头的 RFC 9562 格式,本页面两者都能生成。
这些标识符能用作密码或会话令牌吗?
不能。它们的设计目标是唯一且可排序,而不是保密。同批生成的标识符共享时间并逐个递增,因此下一个标识符可以被猜到。若需要保密的值,请使用密码生成器或加密令牌。
什么是 Nanoid 风格的标识符?
由您选择的字符集中抽取、长度由您选择的随机字符串。使用64个 URL 安全字符的21字符标识符,约含126位随机性,这也是本页面采用的默认值。
为什么某一行显示破折号,而不是时间?
Nanoid 从头到尾都是随机的,不含时间,因此没有可读取的内容。只有 ULID 和版本7的 UUID 才包含创建时间。
为什么无法读取某个 UUID 的时间?
只有版本7的 UUID 包含时间。页面会告诉您所粘贴 UUID 的版本,并读取符合 RFC 9562 的版本7 UUID。
我的标识符或粘贴的文本会被发送到什么地方吗?
不会。标识符在您的浏览器中借助 crypto.getRandomValues 生成,粘贴的文本只在此处读取。不会上传或保存任何内容。
资料来源
- ULID 规范(GitHub 上的 ulid/spec,英文)
- RFC 9562:Universally Unique IDentifiers(UUID),版本7(英文)
- Crockford 的 Base32 编码(英文)
- W3C Web Cryptography API:getRandomValues(英文)
数据和文字最近核对于2026年11月10日星期二。