跳至内容

免费 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. 长度:1 到 100 之间的整数。默认值为 21。
  2. 字符集:用于构成 ID 的字符组。默认值为字母数字字符集。

输入长度、选择字符集,然后按“生成”来创建 ID。按“复制”即可复制 ID,按“重置”可将长度恢复为 21,并将字符集恢复为字母数字字符集。每当长度或字符集发生变化时,工具也会自动显示新的 ID。在按钮下方,工具会将 ID 中的每个字符绘制为一个彩色块:大写字母显示为蓝色,小写字母显示为绿色,数字显示为橙色,标点符号显示为灰色。

如果长度不是 1 到 100 之间的整数,工具会显示消息“长度必须是 1 到 100 之间的整数”,并且不会生成 ID。

可用的字符集

工具提供七种固定字符集,不接受用户自行输入的自定义字母表。“包含符号”字符集在字母数字字符的基础上增加以下 26 个标点符号:! @ # $ % ^ & * ( ) _ + - = [ ] { } | ; : , . < > ?。

字符集使用的字符字母表大小
字母数字(默认)A-Z、a-z、0-962
URL 安全A-Z、a-z、0-9、-、_64
数字0-910
字母A-Z、a-z52
小写字母a-z26
大写字母A-Z26
包含符号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 ID21 个字符,可调整随机、紧凑,不能按时间排序
UUID36 个字符标准格式,支持广泛,包含连字符
ULID26 个字符可按创建时间排序
KSUID27 个字符可按创建时间排序,包含时间戳
自动递增整数不固定简单且连续,但可预测,在不同数据库之间难以协调

常见问题

默认 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 个。

参考资料

  1. Sitnik, Andrey. “Nano ID.” GitHub, https://github.com/ai/nanoid.
  2. “Universally unique identifier.” Wikipedia, Wikimedia Foundation, https://en.wikipedia.org/wiki/Universally_unique_identifier.
  3. “ULID Spec.” GitHub, https://github.com/ulid/spec.