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