Hashids は、数値から YouTube のような ID を生成する小さな PHP ライブラリです。データベースの数値 ID をユーザーに公開したくない場合に使用します: https://bashids.org/php
Composer とともにこのパッケージをプロジェクトのルート ディレクトリに置く必要があります。
composer require hashids/hashids
次に、クラスをアプリケーションにインポートできます。
use Hashids Hashids ;
$ hashids = new Hashids ();
$ hashids -> encode ( 1 );
注Hashid が機能するには、
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 をエンコードする場合に便利です。渡すことができる 16 進数の大きさに制限がないことに注意してください (Mongo の ObjectId である必要はありません)。
use Hashids Hashids ;
$ hashids = new Hashids ();
$ id = $ hashids -> encodeHex ( ' 507f1f77bcf86cd799439011 ' ); // y42LW46J9luq3Xq9XMly
$ hex = $ hashids -> decodeHex ( $ id ); // 507f1f77bcf86cd799439011
デコードすると、出力は常に数値の配列になります (数値が 1 つだけエンコードされた場合でも)。
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 は暗号化ライブラリではありません。
Hashid の主な目的は、数値 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