随机 NanoID 生成器
生成加密安全的 NanoID —— UUID 的现代化、紧凑型替代方案。具有可定制的字母表(URL 安全、十六进制、字母数字、无混淆字符)、可调节长度(8-64 个字符)、碰撞概率计算器、批量生成和一键复制功能。非常适合构建数据库、API、URL 缩短器和分布式系统的开发人员。
检测到广告拦截,导致我们无法展示广告
MiniWebtool 依靠广告收入免费提供服务。如果这个工具帮到了你,欢迎开通 Premium(无广告 + 更快),或将 MiniWebtool.com 加入白名单后刷新页面。
- 或升级 Premium(无广告)
- 允许 MiniWebtool.com 显示广告,然后刷新
随机 NanoID 生成器
欢迎使用随机 NanoID 生成器,这是一个强大的在线工具,用于生成安全、URL 友好的唯一字符串标识符。NanoID 是 UUID (通用唯一标识符) 的现代、轻量级替代方案,提供更短的 ID 且具有相当的抗碰撞性。无论您是在构建 API、数据库、URL 缩短器还是分布式系统,此生成器都提供具有可定制字母表、可调节长度和实时碰撞概率分析的加密安全 ID。
什么是 NanoID?
NanoID 是一个微型、安全、URL 友好的唯一字符串 ID 生成器,最初由 Andrey Sitnik 为 JavaScript 创建。此后,它已被移植到所有主要的编程语言中。NanoID 的关键创新在于使用更大的字母表(默认 64 个字符)而不是 UUID 的 16 个十六进制数字,这意味着每字符熵更多,ID 更短。
默认的 NanoID 看起来像:V1StGXR8_Z5jdHi6B-myT
NanoID 与 UUID 对比
| 特性 | NanoID | UUID v4 |
|---|---|---|
| 默认长度 | 21 个字符 | 36 个字符(包含连字符) |
| 字母表大小 | 64 个字符 (A-Za-z0-9_-) | 16 个字符 (0-9a-f) |
| 熵 | ~126 位(21 字符) | ~122 位(32 十六进制数字) |
| URL 安全 | ✓ 无需编码 | ✗ 连字符在某些语境下需要编码 |
| 可定制 | ✓ 字母表和长度 | ✗ 固定格式 (8-4-4-4-12) |
| 尺寸效率 | ✓ 每字符 6 位 | ✗ 每字符 4 位 |
| 格式 | 紧凑字符串 | xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx |
此工具如何生成安全的 NanoID
加密随机性
此生成器在服务器端使用 Python 的 secrets 模块,该模块提供由操作系统熵源(Linux/macOS 上的 /dev/urandom,Windows 上的 CryptGenRandom)支持的加密安全随机数生成。NanoID 中的每个字符都是从所选字母表中独立且不可预测地选择的。
字母表预设
我们提供 9 种精心挑选的字母表预设,以适应不同的用例:
- NanoID 默认 (64 字符): 标准 NanoID 字母表
A-Za-z0-9_-。URL 安全、紧凑且广泛兼容。每字符 6 位熵。 - 字母数字 (62 字符): 仅包含字母和数字,无特殊字符。适用于文件名、数据库字段以及符号可能导致问题的语境。
- 十六进制 (16 字符): 传统的十六进制格式。当 ID 需要与基于十六进制的系统(如 CSS 颜色或哈希摘要)集成时非常有用。
- 仅数字 (10 字符): 仅数字 ID。适用于订单号、参考代码或仅接受数字的系统。
- 小写 / 大写 (26 字符): 适用于不区分大小写的系统或追求视觉一致性的单大小写字母表。
- 无混淆字符 (57 字符): 移除了在许多字体中容易混淆的字符 (1/l/I, 0/O/o)。非常适合人工读取的代码,如邀请链接、确认号以及任何需要人工输入的 ID。
- URL 安全 (66 字符): 根据 RFC 3986 未保留字符扩展的字母表,包含
-._~。 - 自定义字母表: 定义您自己的字符集。字符将自动去重。
碰撞概率解释
碰撞概率衡量两个独立生成的 ID 相同的可能性。这在概率论中受生日问题支配:
- 总可能 ID: 字母表大小 ^ id 长度。对于默认 NanoID: 64^21 = ~2^126
- 对于 n 个生成的 ID: 碰撞概率 ~ n^2 / (2 * 总可能数)
- 使用 1,000 个 ID: 概率极小 (~10^-33)
- 要达到 1% 碰撞机会(使用默认设置): 您需要约 ~10^18 个 ID (一百京)
此页面上的碰撞概率计算器根据您选择的字母表和 ID 长度显示实时分析,帮助您为您特定的规模做出明智的 ID 配置决策。
如何使用 NanoID 生成器
- 选择字母表预设: 从 9 种预设中选择或定义自定义字母表。字母表预览会显示将要使用的确切字符。
- 设置 ID 长度: 选择 8 到 64 个字符。默认值为 21,使用标准字母表提供约 126 位熵。
- 配置可选设置: 为命名空间 ID 添加前缀(例如 "usr_"、"doc_")并选择数量 (1-50)。
- 生成并复制: 点击“生成 NanoID”来创建您的 ID。使用一键复制功能复制单个 ID 或一次性复制所有 ID。
NanoID 的应用场景
数据库主键
NanoID 是数据库极佳的主键。它们比 UUID 短(21 对 36 个字符),节省存储空间并减小索引大小。使用前缀如 "usr_" 或 "ord_" 使 ID 具有自我描述性。
API 资源标识符
NanoID 默认 URL 安全,使其成为 REST API 端点的理想选择:/api/users/V1StGXR8_Z5jdHi6B-myT。无需 URL 编码,且在日志和 URL 中看起来很整洁。
URL 缩短器
具有默认字母表的 10 字符 NanoID 提供 64^10 = ~10^18 种可能组合——足以满足任何 URL 缩短器的需求。无混淆字符字母表在这里特别有用,因为用户可能需要手动输入短 URL。
会话令牌和 CSRF 令牌
由于此工具使用加密随机性,生成的 ID 适用于安全令牌。对于敏感的安全应用,请使用更长的长度(32-64 个字符)。
分布式系统
NanoID 可以在多个服务器上独立生成而无需协调,不像自动递增整数。即使在大规模情况下,碰撞概率也微乎其微。
文件名命名
使用字母数字预设可在所有操作系统上实现安全的文件名。没有特殊字符意味着在 Windows、macOS 或 Linux 上没有转义问题。
选择合适的长度
| 长度 | 熵 (64 字符字母表) | 最适用于 | 1% 碰撞阈值 |
|---|---|---|---|
| 8 | 48 位 | 短 URL, 小数据集 | ~1600 万个 ID |
| 12 | 72 位 | 通用目的, 中型数据集 | ~680 亿个 ID |
| 16 | 96 位 | 大型系统, 高吞吐量 | ~280 万亿个 ID |
| 21 | 126 位 | 默认, 大多数应用 | ~10^18 个 ID |
| 32 | 192 位 | 安全令牌, 超级安全 | ~10^28 个 ID |
| 64 | 384 位 | 最大安全性 | ~10^57 个 ID |
代码示例
JavaScript (使用 nanoid 软件包)
// 默认:21 字符, URL 安全字母表
const id = nanoid(); // "V1StGXR8_Z5jdHi6B-myT"
// 自定义长度
const shortId = nanoid(10); // "IRFa-VaY2b"
// 自定义字母表
import { customAlphabet } from 'nanoid';
const hexId = customAlphabet('0123456789abcdef', 12);
Python (使用 nanoid 软件包)
# 默认 NanoID
id = generate() # "V1StGXR8_Z5jdHi6B-myT"
# 自定义长度和字母表
id = generate('0123456789abcdef', 12)
常见问题
什么是 NanoID,它与 UUID 有什么区别?
NanoID 是一个微型、安全、URL 友好的唯一字符串 ID 生成器。它默认长度为 21 个字符(而 UUID 为 36 个字符),使用更大的字母表 (A-Za-z0-9_-) 以获得更多的每字符熵,无需编码即可实现 URL 安全,且没有固定的格式或连字符。NanoID 能够以更少的字符实现与 UUID v4 相似的抗碰撞性,因为它使用了 64 个符号而不是 16 个十六进制数字。
此工具生成的 NanoID 安全吗?
此工具使用 Python 的 secrets 模块,该模块提供由操作系统熵源支持的加密安全随机数生成。每个字符都是独立且不可预测地选择的。使用标准字母表的默认 21 字符 NanoID 具有约 126 位熵,与 UUID v4 的约 122 位熵相当。
我的项目应该使用多长的 NanoID?
默认长度 21 个字符在使用标准字母表时提供约 126 位熵,足以满足大多数应用。对于 URL 缩短器或面向用户的 ID, 8-12 个字符可能就足够了,具体取决于您的总 ID 数量。对于生成数百万个 ID 的分布式系统,21 个以上的字符可确保碰撞概率微乎其微。使用碰撞概率计算器为您特定的用例找到合适的长度。
我可以将 NanoID 用作数据库主键吗?
可以,NanoID 非常适合作为数据库主键。它们紧凑(21 个字符对比 UUID 的 36 个字符)、URL 安全,并且具有出色的抗碰撞性。然而,与自动递增的整数不同,它们不是顺序的——因此如果您的数据库使用 B 树索引,随机 ID 可能会导致更多的页面拆分。考虑使用前缀(如 'usr_' 或 'ord_')使 ID 具有自我描述性。
什么是“无混淆字符”字母表预设?
无混淆字符 (No-Lookalike) 预设移除了在许多字体中看起来相似的字符:1/l/I(数字 1、小写字母 L、大写字母 I)和 0/O/o(数字 0、大写字母 O、小写字母 O)。这使得 ID 更易于阅读、记录和口头交流。它非常适合面向用户的 ID,如邀请码、确认号或任何需要人工输入的 ID。
额外资源
引用此内容、页面或工具为:
"随机 NanoID 生成器" 于 https://MiniWebtool.com/zh-cn//,来自 MiniWebtool,https://MiniWebtool.com/
由 miniwebtool 团队提供。更新日期:2026年2月7日