前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >强大PHP工具库从数字生成类似 YouTube ID

强大PHP工具库从数字生成类似 YouTube ID

作者头像
Tinywan
发布2024-05-11 17:01:59
620
发布2024-05-11 17:01:59
举报
文章被收录于专栏:开源技术小栈开源技术小栈

Hashids是什么?

Hashids 是一个小型的 PHP 库,用于从数字生成类似 YouTube 的 ID。当你不希望将数据库的数字 ID 暴露给用户时,可以使用它:https://hashids.org/php

开始使用

在项目的根目录中,使用 Composer 要求这个包。

代码语言:javascript
复制
composer require hashids/hashids

然后你可以将类导入到你的应用程序中:

代码语言:javascript
复制
use Hashids\Hashids;

$hashids = new Hashids();

$hashids->encode(1);

“注意 Hashids 需要 bcmathgmp 扩展才能工作。

快速示例

代码语言:javascript
复制
use Hashids\Hashids;

$hashids = new Hashids();

$id = $hashids->encode(1, 2, 3); // o2fXhV
$numbers = $hashids->decode($id); // [1, 2, 3]

更多选项

encode() 函数传递输入 ID 的几种更多方式:

代码语言:javascript
复制
use Hashids\Hashids;

$hashids = new Hashids();

$hashids->encode(1, 2, 3); // o2fXhV
$hashids->encode([1, 2, 3]); // o2fXhV
$hashids->encode('1', '2', '3'); // o2fXhV
$hashids->encode(['1', '2', '3']); // o2fXhV

使输出 ID 唯一

通过传递一个项目名称来使你的输出 ID 唯一:

代码语言:javascript
复制
use Hashids\Hashids;

$hashids = new Hashids('My Project');
$hashids->encode(1, 2, 3); // Z4UrtW

$hashids = new Hashids('My Other Project');
$hashids->encode(1, 2, 3); // gPUasb

使用填充来使输出 ID 更长

Hashids 请注意,输出 ID 仅填充至至少一定长度。这并不意味着它们将恰好是那个长度。

代码语言:javascript
复制
use Hashids\Hashids;

$hashids = new Hashids(); // 无填充
$hashids->encode(1); // jR

$hashids = new Hashids('', 10); // 填充至长度 10
$hashids->encode(1); // VolejRejNm

使用自定义字母表

代码语言:javascript
复制
use Hashids\Hashids;

$hashids = new Hashids('', 0, 'abcdefghijklmnopqrstuvwxyz'); // 全小写
$hashids->encode(1, 2, 3); // mdfphx

编码十六进制而不是数字

如果你想要编码 MongoDB 的 ObjectIds,这很有用。请注意,可以传递的十六进制数字大小没有限制(它不必是 MongoDB 的 ObjectId)。

代码语言:javascript
复制
use Hashids\Hashids;

$hashids = new Hashids();

$id = $hashids->encodeHex('507f1f77bcf86cd799439011'); // y42LW46J9luq3Xq9XMly
$hex = $hashids->decodeHex($id); // 507f1f77bcf86cd799439011

陷阱

  1. 解码时,输出总是一个数字数组(即使你只编码了一个数字):
代码语言:javascript
复制
use Hashids\Hashids;

$hashids = new Hashids();

$id = $hashids->encode(1);

$hashids->decode($id); // [1]
  1. 不支持编码负数。
  2. 如果你向 encode() 传递无效输入,将返回一个空字符串:
代码语言:javascript
复制
use Hashids\Hashids;

$hashids = new Hashids();

$id = $hashids->encode('123a');

$id === ''; // true
  1. 不要使用这个库作为安全措施。不要用它来编码敏感数据。Hashids 不是一个加密库。

随机性

Hashids 的主要目的是混淆数字ID。它不是作为安全或压缩工具设计或测试的。话虽如此,这个算法确实试图使这些 ID 随机且不可预测,当编码多个相同的数字时(以下示例中显示了 3 个),没有显示模式:

代码语言:javascript
复制
use Hashids\Hashids;

$hashids = new Hashids();

$hashids->encode(5, 5, 5); // A6t1tQ

当编码一系列数字与分别编码它们时,也是如此:

代码语言:javascript
复制
use Hashids\Hashids;

$hashids = new Hashids();

$hashids->encode(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); // wpfLh9iwsqt0uyCEFjHM

$hashids->encode(1); // jR
$hashids->encode(2); // k5
$hashids->encode(3); // l5
$hashids->encode(4); // mO
$hashids->encode(5); // nR
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-05-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 开源技术小栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Hashids是什么?
  • 开始使用
  • 快速示例
  • 更多选项
    • 向 encode() 函数传递输入 ID 的几种更多方式:
      • 使输出 ID 唯一
        • 使用填充来使输出 ID 更长
          • 使用自定义字母表
            • 编码十六进制而不是数字
            • 陷阱
            • 随机性
            相关产品与服务
            云数据库 MongoDB
            腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档