免费 Nano ID 生成器 - 安全的 URL 友好唯一 ID 在线工具
免费在线生成随机的Nano ID唯一标识符,可自由自定义生成的字符串长度和所使用的字符集范围,创建出比传统UUID短约42%、同样具备URL安全特性的紧凑型唯一标识符。适用于数据库主键设计、API访问令牌生成和短链接系统构建等开发场景,全部计算过程均在浏览器本地完成,保护数据隐私安全。
生成的 Nano ID 的长度(1-100 个字符)
选择您的 Nano ID 的字符集
生成的 Nano ID
可视化
文档
纳米 ID 生成器:在线创建随机唯一 ID
纳米 ID 生成器会创建一种名为 Nano ID 的短随机字符串。Nano ID 可作为数据库记录、URL 和 API 令牌等对象的唯一标识符,任意两个生成的 ID 极不可能相同。
什么是 Nano ID?
Nano ID 是一种随机生成的字符串,用于标记对象,使其能够与其他所有对象区分开来。软件开发者 Andrey Sitnik 于 2017 年创建了这种格式,作为 UUID(通用唯一标识符)的小型替代方案。UUID 是计算领域广泛使用的 36 字符标识符。默认 Nano ID 的长度为 21 个字符,而 UUID 的长度为 36 个字符,缩短约 42%。
如何使用此工具生成 Nano ID
此页面上的生成器根据两个设置创建 Nano ID。
- 长度:1 到 100 之间的整数。默认值为 21。
- 字符集:用于构成 ID 的字符组。默认值为字母数字字符集。
输入长度、选择字符集,然后按“生成”来创建 ID。按“复制”即可复制 ID,按“重置”可将长度恢复为 21,并将字符集恢复为字母数字字符集。每当长度或字符集发生变化时,工具也会自动显示新的 ID。在按钮下方,工具会将 ID 中的每个字符绘制为一个彩色块:大写字母显示为蓝色,小写字母显示为绿色,数字显示为橙色,标点符号显示为灰色。
如果长度不是 1 到 100 之间的整数,工具会显示消息“长度必须是 1 到 100 之间的整数”,并且不会生成 ID。
可用的字符集
工具提供七种固定字符集,不接受用户自行输入的自定义字母表。“包含符号”字符集在字母数字字符的基础上增加以下 26 个标点符号:! @ # $ % ^ & * ( ) _ + - = [ ] { } | ; : , . < > ?。
| 字符集 | 使用的字符 | 字母表大小 |
|---|---|---|
| 字母数字(默认) | A-Z、a-z、0-9 | 62 |
| URL 安全 | A-Z、a-z、0-9、-、_ | 64 |
| 数字 | 0-9 | 10 |
| 字母 | A-Z、a-z | 52 |
| 小写字母 | a-z | 26 |
| 大写字母 | A-Z | 26 |
| 包含符号 | A-Z、a-z、0-9 和 26 个标点符号 | 88 |
默认选择字母数字字符集。该字符集不包含 URL 安全字符集中的连字符和下划线,不过仅由字母和数字组成的字符串已经可以安全地直接放入 URL 中。
Nano ID 的计算公式
Nano ID 会使用密码学安全的随机数生成器,从一个字母表中逐个随机选择固定数量的字符。密码学安全的随机数生成器经过设计,其输出无法提前预测。
1id = random(alphabet, size)
2使用默认设置时,alphabet 包含 62 个字符,size 为 21。
示例
使用默认的字母数字字母表和 21 的长度时,可能生成的一个 ID 是:
1K7pQ2mZxT9vY4nR8jH3wL
2每个字符都独立地从 62 个字母和数字中选取,因此连续运行生成器两次几乎不会产生相同的字符串。
如何计算碰撞概率
由于 Nano ID 是随机选择的,因此两个生成的 ID 可能相同,尽管这种情况极不可能发生。这称为碰撞。生成 k 个 ID 后至少发生一次碰撞的概率,遵循与“生日问题”相同的数学规律:
1P(collision) ≈ 1 - e^(-k² / (2n))
2其中,n 是所有可能 ID 的数量,即字母表大小的 ID 长度次方,或 n = alphabet_size^length。
计算示例
对于默认设置,即使用包含 62 个字符的字母表和长度为 21 的 ID:
1n = 62^21 ≈ 4.4 × 10^37 possible IDs
2将公式变形以求得 1% 的碰撞概率:
1k ≈ 9.4 × 10^17 IDs
2这意味着,大约需要生成 940 千万亿个 ID,两个 ID 才有 1% 的概率相同。若每秒生成一百万个 ID,达到这个数量大约需要 29,700 年。
改用包含 64 个字符的 URL 安全字母表后,可选 ID 的数量增加,因此相同 1% 风险对应的数量会略有提高,约为 1.3 × 10^18 个 ID。
Nano ID 与其他标识符的比较
| 类型 | 长度 | 说明 |
|---|---|---|
| Nano ID | 21 个字符,可调整 | 随机、紧凑,不能按时间排序 |
| UUID | 36 个字符 | 标准格式,支持广泛,包含连字符 |
| ULID | 26 个字符 | 可按创建时间排序 |
| KSUID | 27 个字符 | 可按创建时间排序,包含时间戳 |
| 自动递增整数 | 不固定 | 简单且连续,但可预测,在不同数据库之间难以协调 |
常见问题
默认 Nano ID 的长度和字符集是什么?
默认值是从字母数字字符集中选取 21 个字符:A-Z、a-z、0-9,共 62 个字符。
此工具支持自定义字母表吗?
不支持。工具提供七种固定字符集:字母数字、URL 安全、数字、字母、小写字母、大写字母和“包含符号”。
Nano ID 与 UUID 有什么区别?
Nano ID 更短。默认 Nano ID 为 21 个字符,而 UUID 为 36 个字符,短约 42%。两者都是随机生成的,并且都不是连续的。
Nano ID 能按创建时间排序吗?
不能。Nano ID 完全随机,不包含生成时间信息。ULID 或 KSUID 等格式则专门设计为可以按时间排序。
Nano ID 可以作为数据库主键安全使用吗?
可以。Nano ID 应存储为文本或字符串列,而不是数字列,并为其建立唯一索引,以便快速查询。
可能存在多少个 Nano ID?
这取决于所选的长度和字符集。使用默认的 62 字符字母表和长度为 21 的设置时,可能存在 62^21 个 ID,约为 4.4 × 10^37 个。
参考资料
- Sitnik, Andrey. “Nano ID.” GitHub, https://github.com/ai/nanoid.
- “Universally unique identifier.” Wikipedia, Wikimedia Foundation, https://en.wikipedia.org/wiki/Universally_unique_identifier.
- “ULID Spec.” GitHub, https://github.com/ulid/spec.