hashids
5.0.2
Hashids是一个小型 PHP 库,用于从数字生成类似 YouTube 的 id。当您不想向用户公开数据库数字 ID 时使用它:https://hashids.org/php
需要将此包与 Composer 一起放在项目的根目录中。
composer require hashids/hashids
然后您可以将该类导入到您的应用程序中:
use Hashids Hashids ;
$ hashids = new Hashids ();
$ hashids -> encode ( 1 );
注意Hashids 需要
bcmath
或gmp
扩展名才能工作。
use Hashids Hashids ;
$ hashids = new Hashids ();
$ id = $ hashids -> encode ( 1 , 2 , 3 ); // o2fXhV
$ numbers = $ hashids -> decode ( $ id ); // [1, 2, 3]
encode()
函数的其他几种方法: 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 唯一:
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 仅被填充以至少适合特定长度。这并不意味着它们将恰好是那个长度。
use Hashids Hashids ;
$ hashids = new Hashids (); // no padding
$ hashids -> encode ( 1 ); // jR
$ hashids = new Hashids ( '' , 10 ); // pad to length 10
$ hashids -> encode ( 1 ); // VolejRejNm
use Hashids Hashids ;
$ hashids = new Hashids ( '' , 0 , ' abcdefghijklmnopqrstuvwxyz ' ); // all lowercase
$ hashids -> encode ( 1 , 2 , 3 ); // mdfphx
如果您想对 Mongo 的 ObjectId 进行编码,则很有用。请注意,您可以传递的十六进制数的大小没有限制(不一定是 Mongo 的 ObjectId)。
use Hashids Hashids ;
$ hashids = new Hashids ();
$ id = $ hashids -> encodeHex ( ' 507f1f77bcf86cd799439011 ' ); // y42LW46J9luq3Xq9XMly
$ hex = $ hashids -> decodeHex ( $ id ); // 507f1f77bcf86cd799439011
解码时,输出始终是一组数字(即使您只编码一个数字):
use Hashids Hashids ;
$ hashids = new Hashids ();
$ id = $ hashids -> encode ( 1 );
$ hashids -> decode ( $ id ); // [1]
不支持对负数进行编码。
如果将虚假输入传递给encode()
,将返回一个空字符串:
use Hashids Hashids ;
$ hashids = new Hashids ();
$ id = $ hashids -> encode ( ' 123a ' );
$ id === '' ; // true
不要使用此库作为安全措施。不要用它编码敏感数据。 Hashids不是加密库。
Hashids 的主要目的是混淆数字 ID。它无意或经过测试用作安全或压缩工具。话虽如此,该算法确实尝试使这些 id 变得随机且不可预测:
对多个相同的数字进行编码时不会显示任何模式(以下示例中显示 3):
use Hashids Hashids ;
$ hashids = new Hashids ();
$ hashids -> encode ( 5 , 5 , 5 ); // A6t1tQ
对一系列数字进行编码与单独对它们进行编码时也是如此:
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
编写此代码的目的是将输出 id 放置在可见位置,例如 URL。因此,该算法尝试通过生成不包含以下字母的 id 来避免生成最常见的英语诅咒词:
c, f, h, i, s, t, u