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不包含任何淫秽词汇

Tags: PHP

添加新评论