随机短 ID 生成

一次生成 ULID、NanoID 或雪花 ID 的批量结果,都是纯前端生成,不联网也不调用接口。

26 个字符,按字典序即按时间序,适合做主键

三种 ID 怎么选

ULID 用 Crockford Base32 编码,去掉了容易看错的 I、L、O、U,所以按字符串排序就等于按时间排序,放进数据库当主键既有顺序又不会像自增那样暴露业务量。同一毫秒内连续生成时,时间戳会往后挪一毫秒,保证字典序严格递增。

NanoID 没有时间信息,胜在短和字母表可控:默认 21 个字符约等于 126 位随机量,比 UUID v4 短但还是很难撞;需要放进 URL 时可以换成纯 URL 安全字母表,需要人念出来可以换成纯数字。长度每增加一个字符,随机空间就乘以字母表大小。

雪花 ID 是 64 位整数,41 位时间戳、10 位机器号、12 位序列号,所以同一毫秒里每台机器能发 4096 个不重复的 ID。本页默认纪元是 2020-01-01,机器号用于区分实例,序列号连续生成时会自动往后加,得到的数字串天然递增。