ULID 生成器

加密

生成基于毫秒时间戳的可排序唯一 ID(ULID),兼具全局唯一性与按创建时间排序能力。前 48 位为毫秒时间戳、后 80 位为随机部分,用不易混淆的 Base32 字符表示。同一毫秒内生成多个时按顺序递增,因此整体保持单调可排序。适合日志事件 ID、分布式主键与需要分页排序的场景。

0 ULID · 可按时间排序
ULID生成结果

关于 ULID 生成器

ULID 生成器创建 26 个字符、按字典序可排序的标识符,是 UUID 在需要按时间就近排序场景下的理想替代。ULID 由 48 位毫秒时间戳加上 80 位随机数组成,既保留全局唯一性,又让新生成的 ID 天然大于旧的 ID,非常适合作为数据库主键、日志追踪号或消息队列的排序键。本工具在浏览器本地用 crypto 生成符合规范的 ULID,可一次性批量产出多个,并支持与 UUID 互相参考对照。所有随机性来自密码学安全源,结果直接在页面复制使用,无需后端参与,是分布式系统与事件溯源中排序友好型 ID 的轻量来源。在事件溯源与日志系统中,排序友好的 ID 还能减少索引碎片并加快范围查询的速度;相比无序的 UUID,它在按时间拉取最近记录时不必额外排序,是高并发写入场景下兼顾唯一性与性能的合理选择,也能与站内 UUID 工具对照使用。

使用方法

  1. 打开「ULID 生成器」
  2. 输入待处理的内容并设置参数
  3. 根据需要调整输出选项
  4. 点击「生成」按钮,结果实时显示
  5. 复制或导出结果

使用场景

  • 可排序主键 — 用 ULID 做数据库主键,写入顺序与时间一致,利于范围查询和索引局部性。
  • 日志/事件 ID — 给日志或事件流分配能按时间排序的唯一标识,便于追踪先后。
  • 分布式生成 — 多个节点无需协调即可生成不冲突且大致有序的 ID。
  • 替代自增主键 — 在不暴露记录总量的前提下获得有序 ID,比自增更安全。
  • 批量预生成 — 一次生成多条 ULID 用于批量导入或预分配标识。

常见问题

ULID 和 UUID 该怎么选?

需要随机性、跨系统标准兼容选 UUID;需要按时间排序、对数据库索引更友好选 ULID。ULID 的时间前缀让新记录总排在后面,避免随机 UUID 造成的索引碎片。需要 UUID 可用本站的 UUID 生成器。

ULID 一定单调递增吗?

在毫秒粒度上是按时间递增的,但同一毫秒内生成的多个 ULID 顺序由随机部分决定。规范提供了单调模式,可在同毫秒内对随机位递增以保证严格有序。

为什么用 Crockford Base32?

这种编码去掉了 I、L、O、U 等易与数字混淆或拼成脏词的字符,大小写不敏感,更适合人工抄写和在 URL 中使用。

ULID 会暴露生成时间吗?

会。前 10 个字符可解码出毫秒级时间戳,这在需要排序时是优点,但若不希望泄露创建时间,则应改用纯随机的标识。

26 个字符会重复吗?

时间戳占 48 位、随机部分占 80 位。同一毫秒内要发生碰撞需生成天文数字级别的 ID,实际使用中可视为唯一。

ULID 生成速度快,比 UUID 快吗?

两者基本同量级,差别可忽略。ULID 的时间部分来自系统时钟,随机部分来自一次密码学安全随机调用,本地生成无网络开销,适合每秒生成大量 ID 的高并发场景。若某瞬间(同一毫秒内)要生成海量 ULID,可启用规范的单调模式,让随机位在该毫秒内递增以保证严格有序;工程上通常无需额外缓存或预生成即可满足性能要求。

ULID 真能减少数据库索引碎片吗?

能,这是它相对随机 UUID 的主要优势。前 48 位毫秒时间戳让新 ID 大多落在索引尾部,写入近似追加式,页命中率高、页分裂少,范围查询也更顺手。但它只在毫秒粒度上有序,同一毫秒内多个 ID 的顺序仍由随机部分决定。若需要跨节点全局严格递增,可考虑雪花算法类方案;只要求可排序且唯一时,ULID 通常是更轻、更规范的选择。

广告