ULID 也是一种唯一标识符,长这样:01ARZ3NDEKTSV4RRFFQ69G5FAV,一共 26 个字符。
它跟 UUID 最大的区别是:ULID 是按时间递增的。前面 10 个字符记录的是生成的时间戳,后面 16 个字符是随机部分。所以 ULID 天生就能按生成顺序排序,数据库里当主键特别合适——比 UUID 这种完全随机的字符串,索引效率高很多。
这个工具能做什么?
① 批量生成 ULID
设置生成数量(1 到 500 个),点一下按钮,结果就列在下方的文本框里。可以选大写(标准格式)或小写,按自己的习惯来。
② 自定义时间戳
想让 ULID 记录某个特定时间,可以在"自定义指定时间戳"里选一个日期时间,生成的 ULID 前面就会带上这个时间。不填的话默认用当前时间。
③ 解析已有的 ULID
把任何 26 位的 ULID 粘贴到解析框里,工具会立刻拆解给你看:
时间戳部分(前 10 个字符)——对应哪个时间,显示毫秒数值和具体日期
随机部分(后 16 个字符)——用不同颜色高亮区分
ISO 8601 格式的 UTC 时间——标准的国际时间表示
本地时间——换算成你所在时区的时间
十六进制全量映射——128 位的完整二进制表示
输入的时候就算大小写混了、或者不小心把 I、L、O 打成了 1、0,工具也会自动纠正,不用手动改。
顶部状态栏一直显示
当前总共生成了多少条、最新一条 ULID 是什么,都实时显示在顶部。点"快速生成 1 条"可以单独生成一个,点"清空数据"全部重置。
Crockford's Base32 编码是什么?
ULID 用的字符集是 0123456789ABCDEFGHJKMNPQRSTVWXYZ,一共 32 个字符。注意它排除了 I、L、O、U 四个字母——I、L、O 容易跟 1、0 混淆,U 是为了避免拼出不雅词汇。所以 ULID 读起来、写起来都不容易出错。
适合谁用?
程序员开发时生成数据库主键,做分布式系统时生成有序唯一 ID,排查问题时解析 ULID 看看它记录的时间,或者单纯想了解一下 ULID 的结构和原理。
温馨提示
ULID 的时间戳是 48 位,理论上能用到公元 10889 年,日常使用完全够。同一毫秒内生成的多个 ULID 靠随机部分保证不重复,80 位的随机空间重复概率极低。
总结
批量生成 ULID,能自定义时间戳,还能把现有 ULID 拆解出时间和结构。开发造数据、排查问题、了解原理都能用。