ULID生成器 - 生成可排序唯一ID 在线工具
生成ULID、提取时间戳、在ULID和UUID格式之间转换。单调递增生成确保严格排序 — 100%客户端处理,无数据发送至服务器。
批量生成
常见问题
什么是 ULID?
ULID(Universally Unique Lexicographically Sortable Identifier,通用唯一字典序可排序标识符)是一种128位标识符,使用 Crockford 的 Base32 编码为26个字符的字符串。与传统 UUID 不同,ULID 在前10个字符中嵌入48位 Unix 时间戳(毫秒级),其余16个字符包含80位加密随机数。这种设计使 ULID 在保持全局唯一性的同时,可按创建时间进行字典序排序。
如何使用这个 ULID 生成器?
使用生成选项卡创建单个或批量 ULID(最多1000个)。开启单调(Monotonic)模式可确保同一毫秒内的严格排序。使用解码选项卡粘贴任意 ULID,提取其嵌入的时间戳(ISO 8601、Unix 毫秒和本地时间)。使用转换选项卡在 ULID 和 UUID 格式之间相互转换。点击复制按钮将结果复制到剪贴板。
我的数据安全吗?是否会发送到服务器?
所有操作均使用 Web Crypto API(crypto.getRandomValues())100% 在浏览器中执行。没有任何 ULID 数据、时间戳或 UUID 会被传输到任何服务器、存储在任何数据库中或记录在任何地方。您可以通过断开互联网连接来验证——该工具完全支持离线使用。
ULID 和 UUID 有什么区别?
两者都是128位标识符,但存在关键区别:ULID 为26个字符(Crockford 的 Base32),UUID 为36个字符(带连字符的十六进制)。ULID 可按创建时间进行字典序排序;UUID(v4)为随机顺序。ULID 不包含特殊字符,对 URL 安全。由于两者都是128位值,ULID 和 UUID 之间可以相互转换。
什么是单调(Monotonic)ULID 生成?
当在同一毫秒内生成多个 ULID 时,标准生成方式每次分配随机值,可能导致 ULID 顺序混乱。单调生成通过对同一毫秒内生成的每个 ULID 的随机部分递增1来解决此问题,保证严格的字典序排列。这对于依赖 ID 排序的数据库系统至关重要。
什么时候应该使用 ULID 而不是 UUID?
当您需要无需额外时间戳列即可按时间排序的标识符、更好的数据库索引性能(B-tree 友好)、更短的字符串表示(26个字符 vs 36个字符)或 URL 安全的标识符时,请使用 ULID。当您需要最大程度的生态系统兼容性、RFC 合规性或内置的版本/变体元数据时,请使用 UUID。
代码示例
// Crockford's Base32 alphabet
const ENCODING = '0123456789ABCDEFGHJKMNPQRSTVWXYZ';
// Generate a ULID
function generateULID() {
const timestamp = Date.now();
let ts = timestamp;
let timestampPart = '';
for (let i = 9; i >= 0; i--) {
timestampPart = ENCODING[ts % 32] + timestampPart;
ts = Math.floor(ts / 32);
}
const randomBytes = new Uint8Array(10);
crypto.getRandomValues(randomBytes);
const bits = Array.from(randomBytes)
.map(b => b.toString(2).padStart(8, '0')).join('');
let randomPart = '';
for (let i = 0; i < 16; i++) {
randomPart += ENCODING[parseInt(bits.slice(i*5, i*5+5), 2)];
}
return timestampPart + randomPart;
}
console.log(generateULID()); // "01ARZ3NDEKTSV4RRFFQ69G5FAV"