什么是 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 可能会影响某些数据库的索引性能。

相关工具

相关术语

UUID

UUID(通用唯一标识符)是一个 128 位的标识符,保证在所有空间和时间上都是唯一的。UUID 表示为 32 个十六进制数字,以 8-4-4-4-12 的格式分成五组,用连字符分隔。

GUID

GUID(全局唯一标识符)是微软对 UUID 标准的实现,是一个 128 位的标识符,用于在计算机系统中唯一标识信息。GUID 和 UUID 本质上是同一事物,只是名称不同。

AI Code Review

AI Code Review 是一种将人工智能(特别是大型语言模型,如 GPT-4, Claude 3.5 Sonnet)集成到软件开发生命周期(SDLC)中的自动化代码审查技术。当开发者提交代码变更(如 GitHub Pull Request 或 GitLab Merge Request)时,AI Agent 会作为一名虚拟的高级工程师,自动读取变更的 Diff 差异,结合项目的上下文、编码规范和最佳实践,快速指出代码中存在的逻辑漏洞、安全隐患、性能瓶颈以及风格问题,并直接在代码行上发表评论甚至生成修复代码。

Jailbreak (越狱)

Jailbreak (越狱) 在人工智能领域指的是一种高级对抗性提示(Adversarial Prompting)技术。攻击者通过精心设计的、通常极具创造性的语言输入,绕过基础大语言模型(如 GPT-4, Claude, Llama)内置的安全护栏(Guardrails)和人类偏好对齐(Alignment)。一旦越狱成功,模型将无视其被训练时定下的道德和安全准则,生成被严令禁止的内容,如编写恶意软件、制造炸弹的配方、或是发表仇恨言论。

相关文章