PHP 生成简短唯一ID开源库 Sqids

什么是 Sqids?

Sqids 是一个开源库,可以从数字生成短的唯一标识符。这些标识符是 URL 安全的,可以编码多个数字,并且不包含常见的粗话。

它有什么用处?

用于链接缩短,为日志生成唯一事件ID,为网站上的产品/对象生成ID(就像YouTube为视频所做的那样),为文本消息生成短ID,邮件确认代码等。

它不适用于什么?

任何不敏感的数据。生成的ID不是哈希值,可以解码回数字。例如,它们可能不是用户ID的好选择,因为一旦解码,它们可能会透露您应用的用户数量。

可以同时编码多个数字吗?

可以。Sqids可以将一个或多个非负数编码为单个ID。您可以编码的数字数量没有限制,但可以编码的数字大小有限(取决于实现语言)。出于几个原因很有用:您可以编码UNIX时间戳并创建过期ID,或者您可以将数据库分片号与主键一起编码,并节省额外的数据库查询。

生成的ID是唯一的吗?

是的,生成的ID对于输入和字母表是唯一的。请记住,默认字母表包含大写和小写字母,因此默认ID是区分大小写的。

Sqids 有什么限制?

  • Sqids无法编码负数。
  • 最小字母表长度为3个字符。
  • 字母表不能包含任何多字节字符。
  • Sqids不能生成特定长度的ID,只能生成至少特定长度的ID。最小长度参数范围介于0和255之间。
  • Sqids可以尝试重新生成ID,直到字母表长度减一。

应用

安装

composer require sqids/sqids

案例

1. 简单的解码和编码

$sqids = new Sqids();
$id = $sqids->encode([1, 2, 3]); // \\\"86Rf07\\\"
$numbers = $sqids->decode($id); // [1, 2, 3]

注意:由于算法的设计,多个ID可以解码回相同的数字序列。如果ID是规范的对您的设计很重要,您必须手动重新编码解码的数字并检查生成的ID是否匹配。

2. 强制ID的最小长度

$sqids = new Sqids(minLength: 10);
$id = $sqids->encode([1, 2, 3]); // \\\"86Rf07xd4z\\\"
$numbers = $sqids->decode($id); // [1, 2, 3]

3. 通过提供自定义字母表随机化ID

$sqids = new Sqids(alphabet: \\\'FxnXM1kBN6cuhsAvjW3Co7l2RePyY8DwaU04Tzt9fHQrqSVKdpimLGIJOgb5ZE\\\');
$id = $sqids->encode([1, 2, 3]); // \\\"B4aajs\\\"
$numbers = $sqids->decode($id); // [1, 2, 3]

4. 防止特定单词出现在自动生成的ID中的任何位置

$sqids = new Sqids(blocklist: [\\\'86Rf07\\\']);
$id = $sqids->encode([1, 2, 3]); // \\\"se8ojk\\\"
$numbers = $sqids->decode($id); // [1, 2, 3]

原创文章,作者:网络技术联盟站,如若转载,请注明出处:https://www.sudun.com/ask/49859.html

(0)
网络技术联盟站's avatar网络技术联盟站
上一篇 2024年5月9日 下午2:55
下一篇 2024年5月9日 下午2:57

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注