NanoID - 轻量、安全的 Unique ID 生成器
NanoID
一个小巧、安全、URL友好、唯一的 JavaScript 字符串 ID 生成器。
- 小巧:130 bytes (已压缩和 gzipped), 没有依赖,Size Limit 控制大小;
- 快速:它比 UUID 快 60%;
- 安全:它使用加密的强随机 API,可在集群中使用;
- 紧凑:它使用比 UUID(A-Za-z0-9_-)更大的字母表,因此,ID 大小从 36 个符号减少到 21 个符号;
- 易用:Nano ID 已被移植到 20种编程语言。
php版:https://github.com/hidehalo/nanoid-php
与 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%。
use Hidehalo\Nanoid\Client;
use Hidehalo\Nanoid\GeneratorInterface;
$client = new Client();
# default random generator
echo $client->generateId($size = 21);
# more safer random generator
echo $client->generateId($size = 21, $mode = Client::MODE_DYNAMIC);
# 自定义字母或长度
echo $client->formattedId($alphabet = '0123456789abcdefg', $size = 21);
# 字母表必须包含256个或更少的符号。否则,生成器将不安全。减小 ID size会增加冲突概率。
# 自定义随机字节生成器
# PS: anonymous class is new feature when PHP_VERSION >= 7.0
echo $client->formattedId($alphabet = '0123456789abcdefg', $size = 21,
new class implements GeneratorInterface {
/**
* @inheritDoc
*/
public function random($size)
{
//TODO: implemenation ...
}
});
# random 回调必须接受数组大小并返回一个带有随机数的数组。
PHP 生成简短唯一ID开源库 Sqids
ID size 计算器 显示调整时的冲突概率 ID 的字母或size
nanoid-good 以确保你的ID不包含任何淫秽词汇