UUID是软件开发中最常用的通用标识符之一。然而在过去的几年里,其他的替代品挑战了它的存在。其中NanoID是接替UUID的主要竞争者之一。 关键字:uuid,nanoid,guid
原文地址
Why is NanoID Replacing UUID? - Charuka Herath
知乎译文
[译] 为什么 NanoID 会取代 UUID - TianTianUp
GITHUB
项目地址 https://github.com/ai/nanoid
与 UUID 的比较
Nano ID 与 UUID v4 (基于随机) 相当。 它们在 ID 中有相似数量的随机位 (Nano ID 为126,UUID 为122),因此它们的冲突概率相似::
要想有十亿分之一的重复机会, 必须产生103万亿个版本4的ID.
Nano ID 和 UUID v4之间有三个主要区别:
- Nano ID 使用更大的字母表,所以类似数量的随机位 被包装在21个符号中,而不是36个。
- Nano ID 代码比 uuid/v4 包少 4倍: 130字节而不是483字节.
- 由于内存分配的技巧,Nano ID 比 UUID 快 60%。
安全性
请看一篇关于随机生成器理论的好文章: 安全的随机值 (在 Node.js 中)
-
不可预测性. 不使用不安全的 Math.random(), Nano ID 使用 Node.js 的 crypto 模块和浏览器的 Web Crypto API。 这些模块使用不可预测的硬件随机生成器。
-
统一性. 随机 % 字母表 是编写ID生成器时常犯的一个错误。 符号的分布是不均匀的; 有些符号出现的几率会比其他符号低。因此, 它将减少刷新时的尝试次数。 Nano ID 使用了一种 更好的算法,并进行了一致性测试。
-
有据可查: 所有的 Nano ID 的行为都有记录。 见 源代码 中的注释。
-
漏洞: 报告安全漏洞,请使用 安全联系人 Tidelift. Tidelift 将协调修复和披露。
其他编程语言
Nano ID 已被移植到许多语言。 你可以使用下面这些移植,获取在客户端和服务器端相同的ID生成器。
- C#
- C++
- Clojure and ClojureScript
- ColdFusion/CFML
- Crystal
- Dart & Flutter
- Deno
- Go
- Elixir
- Haskell
- Janet
- Java
- Nim
- Perl
- PHP
- Python with dictionaries
- R (with dictionaries)
- Ruby
- Rust
- Swift
- Unison
- V
此外,CLI 还可用于从命令行生成 ID。
工具
- ID size 计算器 显示调整时的冲突概率 ID的字母或size。
nanoid-dictionary
与常用的字母一起使用自定义字母
。nanoid-good
以确保你的ID不包含任何淫秽词汇。