开发实战指南

UUID、ULID 与 Nano ID:按需求选择标识符

比较互操作性、排序和随机性,不能把标识符当作授权凭证。

Nav Tools ·

从需求开始

标识符可能需要标准互操作、紧凑表示、顺序或不透明随机性,这些目标可能冲突。

应先确定格式再选字符串长度,数据库、客户端和下游可能已经假定 UUID 语法。

UUID: 550e8400-e29b-41d4-a716-446655440000
This is a public example identifier, not a credential.

了解 UUID 版本

不同 UUID 版本生成性质不同,v4 使用随机方式,时间相关版本具有不同排序与信息属性。

可用 UUID 检查识别现有值版本,生成 UUID 的工具不代表实现所有 RFC 版本。

排序也有边界

ULID 含时间戳与随机部分,可用于字典顺序,但仍需考虑时钟和同一时间生成行为。

Nano ID 注重可配置的紧凑随机表示,调整字符集或长度会改变碰撞性质和互操作性。

唯一性与访问权限分别控制

随机生成降低碰撞概率,但不能数学保证绝无重复,数据库仍需适当唯一约束。

知道或猜到 ID 不能自动获得访问权限,应独立授权,并考虑公开时间相关 ID 所透露的信息。

参考资料

← 开发实战指南