NanoID生成器
在线生成NanoID,支持自定义字母表和长度,实时显示碰撞概率,所有计算在浏览器本地完成
当前字母表大小:64 个字符
464
字母表大小
64
ID 长度
21
生成 100万个后碰撞概率
~1%(约 10亿个)
关于 NanoID
- NanoID 是一个小巧、安全、URL 友好的唯一字符串 ID 生成器,默认使用 64 个字符的字母表,21 位长度
- 与 UUID v4 相比,NanoID 更短(21 vs 36 字符),且可自定义字母表,适合 URL、文件名等场景
- 使用密码学安全的随机数生成器(CSPRNG),安全性与 UUID v4 相当
操作说明
- 选择字母表预设或自定义字母表,调整长度和数量,点击「生成」
- 碰撞概率统计实时更新,帮助选择合适的长度
- 支持复制全部或下载为 TXT 文件
注意事项
- 字母表中的重复字符会降低随机性,建议使用不重复的字符集
- 字母表越小或长度越短,碰撞概率越高,请根据实际需求选择
- 所有生成操作均在浏览器本地完成,不会上传任何数据
NanoID 知识详解
NanoID vs UUID 对比
| 特性 | NanoID(默认) | UUID v4 |
|---|---|---|
| 长度 | 21 字符 | 36 字符(含连字符) |
| 字母表 | 64 个字符(URL安全) | 16 个字符(十六进制) |
| 安全性 | ✅ CSPRNG | ✅ CSPRNG |
| URL 友好 | ✅ 无需编码 | ⚠️ 含连字符 |
| 可自定义 | ✅ 字母表和长度 | ❌ 固定格式 |
| 包大小 | ~130 字节(核心) | 内置/无需库 |
碰撞概率计算
碰撞概率公式(生日悖论近似):
P ≈ 1 - e^(-n² / (2 × alphabet_size^length))
其中 n 为已生成的 ID 数量。默认配置(64字母表,21位)生成 10亿个 ID 后碰撞概率约为 1%。
代码示例
JavaScript / Node.js
import { nanoid } from 'nanoid';
const id = nanoid(); // 'V1StGXR8_Z5jdHi6B-myT'
const shortId = nanoid(10); // 'IRFa-VaY2b'
const id = nanoid(); // 'V1StGXR8_Z5jdHi6B-myT'
const shortId = nanoid(10); // 'IRFa-VaY2b'
自定义字母表
import { customAlphabet } from 'nanoid';
const nanoid = customAlphabet('1234567890abcdef', 10);
const id = nanoid(); // 'a3f2b1c9d4'
const nanoid = customAlphabet('1234567890abcdef', 10);
const id = nanoid(); // 'a3f2b1c9d4'