Nano ID 生成器

在线生成 Nano ID,可自定义长度(1–128)和字符集:URL 安全、字母数字、十六进制、纯数字或自定义。支持单个或批量生成(最多 100 个)。在浏览器中处理,基于 nanoid 库。

  • 在浏览器中处理
  • 数据不离开你的设备
  • 免费 · 无需注册

生成 Nano ID 后,这里显示可复制的列表。

示例、说明与常见问题 带实际输出的示例、与同类工具的差别,以及常见问题。

Nano ID vs UUID 对比

特性Nano ID(默认)UUID v4
长度21 字符36 字符(含连字符)
随机性约 126 位122 位
URL 安全✓ 是✓ 是(连字符本身也是 URL 可直接使用的字符)
自定义字符集✓ 是✗ 否
可排序✗ 否✗ 否
内嵌时间戳✗ 否✗ 否

字符集参考

预设字符数量
URL 安全(默认)A-Za-z0-9_-64
字母数字A-Za-z0-962
纯数字0-910
十六进制小写0-9a-f16

长度怎么定:取件码和短链接

ID 每次随机生成,你点出来的结果和下面不会一样;能算准的是由设置决定的部分:每个字符带 log2(字符集大小) 位随机性,生成到多少个时出现重复的概率达到 1%(按生日问题估算)。

像取件码那样只用 6 位数字:

  • 随机性:6 × log2(10) = 19.9 位
  • 生成约 142 个就有 1% 的概率出现两个相同的码:≈ 142

一百多个就可能撞号,所以这种短码不能只靠随机,发放前必须在数据库里查重,或者只在码仍有效的那段时间、那个范围内保证唯一。

给短链接用 7 位字母数字:

  • 随机性:7 × log2(62) = 41.7 位
  • 1% 碰撞概率对应的数量:≈ 266,000

加到 8 位:

  • 随机性:8 × log2(62) = 47.6 位
  • 1% 碰撞概率对应的数量:≈ 2.1 × 10^6

每多一位,可容纳的数量大约乘以 √62 ≈ 7.9。链接数量预计在几十万以上时,7 位已经不够从容,要么加长,要么在插入时检查唯一约束并在冲突时重试。默认的 21 位 URL 安全 ID 有约 126 位随机性,按同样的估算要生成约 1.3 × 10^18 个才达到 1% 的碰撞概率,但链接会长得多。

自定义字符集按码点计算

自定义字符集会按 Unicode 码点拆开并去掉重复,所以中文字符、emoji 都按一个符号算。比如用十个天干当字符集:

  • 字符集 甲乙丙丁戊己庚辛壬癸 拆成 10 个符号:甲 乙 丙 丁 戊 己 庚 辛 壬 癸
  • 长度 6 的随机性:6 × log2(10) = 19.9 位

结果和 6 位纯数字完全一样:随机性只看符号个数,不看是什么字。换成汉字只是更好认,并不更难猜。另外,一个汉字在 UTF-8 里占 3 个字节,存进按字节限制长度的字段时要留意。

去重后不足 2 个不同符号时,工具不生成,直接提示:

输入 哈哈哈,提示:字符集至少需要 2 个字符

限制

  • 批量数量限制为 1–100,长度限制为 1–128;长度留空或为 0 时按 21 处理。
  • 自定义字符集里的重复字符会被删掉;不同的符号少于 2 个时报错。
  • 自定义字符集按码点读取:😀😃🐱 是 3 个符号,长度 8 的 ID 含 8 个这样的符号(16 个 UTF-16 码元)。国旗、带肤色的 emoji 这类组合字符由两个以上码点组成,会被拆成几个独立的符号。
  • 预设字符集由 Nano ID 3.3.11 生成;自定义字符集由工具为每个符号取一个 32 位随机数,丢弃不小于字符集大小最大整数倍的值,避免取模偏差。
  • Nano ID 不含时间戳,不能按创建时间排序。需要可排序的键时用 ULID 生成器。

相关工具

FAQ

什么是 Nano ID?

Nano ID 是一个小巧、安全、适合放进 URL 的字符串 ID 生成库。默认从 URL 安全字符集(A-Za-z0-9_-)取 21 个字符,约 126 位随机性,与 UUID v4 的 122 位相当。它比 UUID 短,也不包含时间戳。

Nano ID 与 UUID 有何不同?

UUID v4 是 36 个字符(含连字符)。默认 Nano ID 是 21 个字符,随机性相当(约 126 位)。Nano ID 默认可直接放进 URL,没有分隔符,还能自定义字符集和长度,用在 URL、文件名和数据库键上更灵活。

有哪些字符集可以选择?

URL 安全(默认):A-Za-z0-9_-(64 个字符)。字母数字:A-Za-z0-9(62 个)。纯数字:0-9(10 个)。十六进制小写:0-9a-f(16 个)。自定义:输入任意字符,按 Unicode 码点拆分并去重,至少需要 2 个不同的符号。

如何选择合适的长度?

默认长度 21 在 URL 安全字符集下约有 126 位随机性。换成更小的字符集(如 16 个字符的十六进制)时,需要加长才能保持同样的碰撞概率。每多 1 个字符,随机性增加 log2(字符集大小) 位。

生成的 ID 会被发送或保存吗?

不会。ID 在浏览器里用 Web Crypto API(crypto.getRandomValues)生成;生成的 ID 和自定义字符集都不会发送给 ZeroTool,离开页面后工具也不保留。页面上的 Google Analytics 只记录用了哪个操作(生成、复制),不包含 ID。