ULID Generator

One input per line. Output is numbered to match the input order.
Pinned tools are listed in your favourites on the home page.Copies a link to this tool that carries your current input, so it opens ready to run.Gives you an iframe snippet for putting this tool on your own site.

ULID: 48-bit millisecond timestamp + 80-bit random, Crockford Base32. Lexicographically sortable.

Ctrl+Enter Run  · Ctrl+Shift+C Copy  · Esc Clear

Understand ULID Generator

生成 ULID——26 个字符的标识符,开头的字符编码了创建时间,因此它们作为纯文本就能按时间顺序排序。

How it works

ULID 共 128 位:48 位的毫秒时间戳,后接 80 位随机值,以 Crockford Base32 写成 10 个时间戳字符加 16 个随机字符。由于这种编码保持顺序,对字符串排序就是按创建时间排序,这正是 ULID 作为数据库键很划算的原因——新行追加到索引末尾,而不是散布其间。该字母表省略了 I、L、O 和 U,以保证誊写时不产生歧义。

When to use it

  • 为需要时间顺序、又不想依赖中心化序列的表生成主键。
  • 为之后需要按时间做范围扫描的事件、日志或消息生成 id。
  • 在多个服务上各自独立生成、却仍需能够放在一起排序的 id。
  • 任何你本会选用 UUID v4、但同时在意索引局部性的场合。
  • 需要有人从屏幕上读取的标识符,那里受限的字母表会有帮助。

Watch out for

  • 可排序性只在时钟可信的范围内成立。单调模式通过递增随机部分,让同一毫秒内生成的一批 ULID 保持有序,但在不同机器上生成的两个 ULID 是按各自机器的时钟排序的——几毫秒的偏差就足以让它们顺序颠倒。
  • 创建时间是公开的。前 10 个字符可直接解回一个毫秒时间戳,因此任何持有 ULID 的人都知道记录是何时创建的。
  • Crockford Base32 在纸面上大小写不敏感,但按原始字节比较的数据库索引并非如此。本工具始终输出大写;请统一以一种大小写存储,否则排序和相等判断会出乎你的意料。
  • 随机部分是 80 位,而 UUID v4 是 122 位,这一差别只在同一毫秒内才有意义——但它确实意味着,当 id 必须不可猜测时,ULID 是比 UUID v4 更弱的选择。

Frequently Asked Questions

作数据库主键时,ULID 为什么比 UUID v4 更好?

UUID v4 是随机的,会造成 B 树索引的随机插入,规模上去后索引碎片严重。ULID 按时间有序——新记录始终插入到索引末尾,就像自增整数一样,但又是全局唯一的。

ULID 的单调模式是什么?

当同一毫秒内产生多个 ULID 时,单调模式会把上一个的随机部分加一,而不是重新抽取随机位。这保证了同一毫秒内严格的字典序,而普通的随机 ULID 做不到。当你请求批量生成时,本生成器默认使用单调模式。

ULID 区分大小写吗?

不区分——ULID 使用 Crockford Base32(0-9、A-Z,排除 I、L、O、U),其设计本身就是大小写不敏感的。01AN4Z07BY 与 01an4z07by 相同。该字母表还避开了视觉上容易混淆的字符。

How to Use ULID Generator

  1. Paste or type your input in the input area above.
  2. The tool processes your input automatically or click Run.
  3. Copy or download the result using the action buttons.
  4. Use Ctrl+Enter to run quickly from the keyboard.