zhujinkui/hashlib

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

V1.0 2018-09-25 02:46 UTC

This package is auto-updated.

Last update: 2024-09-13 17:54:28 UTC


README

Hashlib是一个小型PHP库,可以从数字中生成类似YouTube的ID,当您不想将数据库ID暴露给用户时使用它。

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

入门

使用Composer在项目的根目录中安装此包。

$ composer require zhujinkui/hashlib

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

use think\Hashlib;

$hashlib = new Hashlib();

$hashlib->encode(1);

快速示例

use think\Hashlib;

$hashlib = new Hashlib();

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

更多选项

传递给encode()的几种方法

use think\Hashlib;

$hashlib = new Hashlib();

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

使ID唯一

传递一个项目名称以使ID唯一

use think\Hashlib;

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

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

使用填充来使ID更长

请注意,ID仅填充以适应至少一定长度。这并不意味着您的ID将是确切的长度。

use think\Hashlib;

$hashlib = new Hashlib(); // no padding
$hashlib->encode(1); // jR

$hashlib = new Hashlib('', 10); // pad to length 10
$hashlib->encode(1); // VolejRejNm

传递一个自定义字母表

use think\Hashlib;

$hashlib = new Hashlib('', 0, 'abcdefghijklmnopqrstuvwxyz'); // all lowercase
$hashlib->encode(1, 2, 3); // mdfphx

以十六进制编码而不是数字

如果您想对Mongo的ObjectId进行编码,这将很有用。请注意,没有限制您可以传递的十六进制数的大小(它不必是Mongo的ObjectId)。

use think\Hashlib;

$hashlib = new Hashlib();

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

陷阱

  1. 在解码时,输出始终是数字数组(即使您只编码一个数字)

    use think\Hashlib;
    
    $hashlib = new Hashlib();
    
    $id = $hashlib->encode(1);
    
    $hashlib->decode($id); // [1]
  2. 不支持编码负数。

  3. 如果您将无效输入传递给encode(),则将返回空字符串

    use think\Hashlib;
    
    $hashlib = new Hashlib();
    
    $id = $hashlib->encode('123a');
    
    $id === ''; // true
  4. 不要将此库用作安全工具,也不要对敏感数据进行编码。这不是一个加密库。

随机性

Hashids的主要目的是混淆ID。它不是为了用作安全或压缩工具而设计或测试的。话虽如此,此算法试图使这些ID随机且不可预测

不会在ID中显示重复模式,表明ID中有3个相同的数字

use think\Hashlib;

$hashlib = new Hashlib();

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

与递增数字相同

use think\Hashlib;

$hashlib = new Hashlib();

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

$hashlib->encode(1); // jR
$hashlib->encode(2); // k5
$hashlib->encode(3); // l5
$hashlib->encode(4); // mO
$hashlib->encode(5); // nR

诅咒!#$%@

此代码的编写目的是将创建的ID放在可见位置,例如URL。因此,算法试图通过生成永远不会将以下字母相邻放置的ID来避免生成大多数常见的英文诅咒词

c, f, h, i, s, t, u

许可证

MIT许可证。请参阅LICENSE文件。您可以在开源项目和商业产品中使用Hashids。不要破坏互联网。谢谢。