什么是 NanoID?

NanoID 是一个用于 JavaScript 的小巧、安全、URL 友好的唯一字符串 ID 生成器。它生成比 UUID 更短的紧凑标识符,同时保持类似的碰撞抵抗能力。

快速了解

全称Nano ID
创建时间2017 年由 Andrey Sitnik 创建
规范文档官方规范

工作原理

NanoID 默认使用加密安全的随机数生成器生成 21 个字符的 ID。与 UUID 不同,NanoID 使用更大的字母表(A-Za-z0-9_-),这使得 ID 更短同时保持唯一性。默认的 21 个字符 ID 与 UUID v4 具有相似的碰撞概率。NanoID 在现代 JavaScript 应用程序中很流行,用于生成数据库记录、URL slug 和会话令牌的 ID。它比 UUID 库更小,没有依赖项。

主要特点

  • 默认 21 个字符(可配置)
  • URL 安全字母表(A-Za-z0-9_-)
  • 加密安全的随机生成
  • 比 UUID 更小(21 vs 36 个字符)
  • 无依赖,体积小(约 130 字节)
  • 可自定义字母表和长度

常见用途

  1. 数据库主键
  2. URL 友好的 slug 和短链接
  3. 会话和令牌标识符
  4. 上传文件命名
  5. React 组件 key

示例

loading...
Loading code...

常见问题

NanoID 和 UUID 有什么区别?

NanoID 生成的 ID 更短(21 个字符 vs UUID 的 36 个字符),同时保持相似的碰撞抵抗能力。NanoID 使用 URL 安全的字母表(A-Za-z0-9_-),生成速度快 40%。UUID 使用带连字符的十六进制字符,遵循标准化格式。

NanoID 是加密安全的吗?

是的,NanoID 使用加密安全的随机数生成器(浏览器中的 crypto.getRandomValues,Node.js 中的 crypto.randomBytes)来生成 ID,使其适用于会话令牌等安全敏感的应用场景。

可以自定义 NanoID 的长度和字母表吗?

可以,NanoID 支持自定义。你可以将自定义长度作为参数传递给 nanoid(length),或使用 customAlphabet() 创建具有特定字符集的生成器。例如,customAlphabet('0123456789', 8) 可创建仅包含数字的 8 字符 ID。

NanoID 的碰撞概率是多少?

使用默认的 21 字符长度和 64 字符字母表,NanoID 的碰撞概率与 UUID v4 相似。你需要以每小时 10 亿个的速度生成 ID,持续约 1490 亿年,才有 1% 的概率发生至少一次碰撞。

NanoID 可以作为数据库主键使用吗?

可以,NanoID 通常被用作数据库主键。与 UUID 相比,其紧凑的大小节省了存储空间,URL 安全的格式使其非常适合 Web 应用。但与自增整数不同,随机 ID 可能会影响某些数据库的索引性能。

相关工具

相关术语

相关文章