Nano ID 生成器
在线生成 Nano ID,可自定义长度(1–128)和字符集:URL 安全、字母数字、十六进制、纯数字或自定义。支持单个或批量生成(最多 100 个)。在浏览器中处理,基于 nanoid 库。
- 在浏览器中处理
- 数据不离开你的设备
- 免费 · 无需注册
用微信扫描以下二维码即可分享
示例、说明与常见问题 带实际输出的示例、与同类工具的差别,以及常见问题。
Nano ID vs UUID 对比
| 特性 | Nano ID(默认) | UUID v4 |
|---|---|---|
| 长度 | 21 字符 | 36 字符(含连字符) |
| 随机性 | 约 126 位 | 122 位 |
| URL 安全 | ✓ 是 | ✓ 是(连字符本身也是 URL 可直接使用的字符) |
| 自定义字符集 | ✓ 是 | ✗ 否 |
| 可排序 | ✗ 否 | ✗ 否 |
| 内嵌时间戳 | ✗ 否 | ✗ 否 |
字符集参考
| 预设 | 字符 | 数量 |
|---|---|---|
| URL 安全(默认) | A-Za-z0-9_- | 64 |
| 字母数字 | A-Za-z0-9 | 62 |
| 纯数字 | 0-9 | 10 |
| 十六进制小写 | 0-9a-f | 16 |
长度怎么定:取件码和短链接
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。