什么是 Nano ID 生成器
Nano ID 是一种紧凑、URL 安全且抗碰撞的标识符格式。本站的生成器让你在浏览器中直接生成自定义的 Nano ID,只需指定长度、允许字符集(字母表)和生成数量。所有计算都在本地完成,不会向 BroBroGo 发送任何数据。与 UUID 的固定 36 字符或 ULID 的 26 字符不同,Nano ID 的默认长度仅为 21 个字符,却提供了与之相当的碰撞防御能力。更重要的是,长度和字母表均可自由调整,以适应各种严格格式约束。
可调核心参数
生成器提供了三个核心输入:
- 长度:通过滑块调节,范围 2 到 36,步长 1。默认值为 21。
- 字母表:一个可编辑文本框,默认为 URL 安全字符(大写字母 A-Z、小写字母 a-z、数字 0-9,以及连字符
-和下划线_,共 64 个字符)。你可以替换为任意字符组合,例如只保留数字0123456789,或移除易混淆字符如0和O。 - 数量:每次生成 1 到 100 个不重复的 ID。
任意一个参数改变(包括从格式下拉菜单选择 Nano ID)都会立即重新生成所有 ID,无需点击任何按钮。
与 UUID 和 ULID 的对比
UUID(v4)固定为 36 字符(含连字符),ULID 固定为 26 字符(基于 Crockford Base32)。Nano ID 将默认长度设在 21 字符,空间效率更高,同时保持足够大的可能性空间:21 字符 × 64 种符号 = 64²¹ ≈ 1.3×10³⁸ 种组合,与 UUID 的 2¹²² 相近。若将长度减至 16 字符,组合数仍有 64¹⁶ ≈ 7.9×10²⁸,对大多数非关键场景已经足够。
关键区别在于可调性。UUID 和 ULID 的格式是固定的;而 Nano ID 允许你:
- 缩短长度以减小存储和传输开销(如 8 字符用于短链接)
- 使用纯数字字母表,兼容只接受数字的系统
- 排除大小写敏感字符,避免人工抄写错误
- 增加长度以应对极高并发场景
浏览器的本地随机性
生成器使用 crypto.getRandomValues() 提供密码学安全的伪随机字节。这是浏览器内置的、经过 FIPS 140 验证的随机数生成器,适合产生不可猜测的标识符。所有 ID 的生成完全在客户端进行,不依赖任何网络请求。这意味着:
- 即使离线,工具也能正常工作
- 没有任何 ID 被记录或传输到服务器
- 性能只受限于本地计算能力,一次生成 100 个 ID 在毫秒级完成
边界条件与错误处理
工具对字母表有严格要求:必须包含 至少 2 个不同的字符。如果用户删除直到只剩一个字符(例如只剩 a),会发生以下行为:
- 结果区域被清空
- ID 计数器显示 0
- “复制全部”按钮被禁用
- 状态提示更新为“字母表需要至少 2 个不同的字符”
注意:即使字母表字符串很长但只有一种字符(如 aaaaa),也会触发此错误。这是为了避免产生只有一个符号的重复字符串,毫无唯一性可言。当输入合法后,状态恢复正常。
长度滑块的范围 2–36 是硬编码限制,因为少于 2 个字符无法保证最低程度的不重复性,超过 36 则实用意义不大(UUID 才 36 字符)。
典型使用场景
- Web API 令牌:Nano ID 的 URL 安全字符集无需编码即可放入 URL 路径或查询参数,长度可裁剪至 12–16 字符平衡安全与长度。
- 数据库主键:用 21 字符比 UUID 短 40%,在索引和存储上节省空间,尤其适合高写入量场景(如日志、事件)。
- 短链接生成器:将字母表限制为数字+小写字母(36 种),长度设为 7,可产生 36⁷ ≈ 7.8×10¹⁰ 种组合,足够小型服务使用。
- 验证码与一次性令牌:要求高熵和不可预测性,使用默认配置即可。
- 隐私敏感应用:因为所有处理都在浏览器端,不离开用户设备,无需担心 ID 泄露或追踪。
常见问题
问:Nano ID 与 UUID 相比,碰撞概率如何?
默认 21 字符(64 符号)时,产生 10 亿个 ID 的碰撞概率约为 1.1×10⁻¹⁸,远低于随机 UUID v4 的碰撞风险。实际上,21 位 Nano ID 的安全性足以应对绝大多数生产环境。
问:为什么我必须使用至少 2 个不同字符?
如果字母表只有一个字符,那么无论 ID 多长,生成的 ID 都将是重复的单个字符序列(如 aaaa),完全不具备唯一性。工具强制至少 2 种字符以确保每个位置都有区分度。
问:我可以将字母表改为只包含汉字吗?
理论上可以,但结果可能不再 URL 安全(汉字需百分号编码),且浏览器内部使用 UTF-16 处理,某些汉字可能被组合字符影响。推荐仅使用 ASCII 可见字符以保证兼容性。
问:生成的 ID 会重复吗?
工具在同一批次内保证不重复(数量最大 100)。不同批次之间理论上可能重叠,但概率极低。如果需要跨批次全局唯一,建议联合使用时间戳或计数器。
问:长度如何影响安全性?
长度增加会指数级增加可能组合数。例如,从 16 位增加到 21 位,组合数扩大约 1.6×10¹⁰ 倍。对于低风险内部系统,16 位可能足够;公网暴露的令牌建议使用 21 位或更长(最大 36)。
问:点击单个 ID 会怎样?
点击任意一个生成的 ID 会立即将其复制到剪贴板,并短暂显示“Copied!”提示。点击“复制全部”按钮则将所有 ID 合并为一行(以换行符分隔)复制。