NanoID 生成器

在线生成 NanoID:默认 21 个 URL-safe 字符,约 126 位随机性,可自定义长度和字母表。

格式
生成结果
就绪,可在浏览器里生成 NanoID。

这个 ID 的结构

结构
默认 21 个 URL-safe 字符,来自 A-Z、a-z、0-9、下划线和连字符。
默认 64 字符字母表、21 字符长度下约 126 位。
时间
不含时间戳;除非你把含义放进自定义字母表,否则 NanoID 是不透明的。
碰撞风险
碰撞风险随长度和字母表变化。默认设置与 UUID v4 处在相近的实用安全区间。
示例
l75xjMBvUEcTo12F74v_q

你的 ID 会用浏览器里的强随机源本地生成,不会发送到 BroBroGo。

常见问题

为什么用 NanoID?

NanoID 比 UUID 短,默认 URL-safe,在保留默认长度和字母表时仍有很高随机性。

可以改字母表吗?

可以。锁定的 NanoID 页面保留长度和字母表控件。字母表更小或长度更短,碰撞风险会升高。

什么是 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,或移除易混淆字符如 0O
  • 数量:每次生成 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 合并为一行(以换行符分隔)复制。