phpで短いユニークなIDを生成する

PHP

ども、僕です

ユニークなユーザIDを生成する必要があり、hashidsというライブラリを使うことにしたよ

その導入方法や使い方を説明するよ

Hashidsとは?

短くてユニークなIDを生成してくれるライブラリで、PHPを始め、Javascript、Ruby、Java、Pythonなど多くの言語をサポートしてる

ユニークIDをPHPで生成するには色々方法があるんだけど、長ったらしいIDになりがちだし、ユニークであることが保証されないことも

そんなわけで短いユニークIDが手軽に生成できるHashidsを利用することにしたよ

特徴1:復号できる

通常、パスワードを暗号化する時は非可逆な方法でハッシュを生成するけど、このHashidsは可逆

つまり復号できる(元に戻せる)

それ故に、パスワードに使うにはあまり向いてない(と思われる)

特徴2:数値のみ

Hashidsは数値からのみハッシュを生成できる

だから文字列からは生成することができない

導入方

コンポーザーで以下のコマンドを叩く

composer require hashids/hashids

以上

使い方

PHPでの最も簡単な使い方

エンコード(符号化)

$hashids = new Hashids\Hashids();
$encodeId = $hashids->encode(1);
// → R3i

これだけで「R3i」のような短いハッシュが得られる

素晴らしい♩

デコード(復号化)

反対に、この結果を復号化するにはこうする

// デコード
$decodeId = $hashids->decode($encodeId);
echo $decodeId[0];
// → 1

元の数値を取得することができる

返却値が配列になってることに注意!

オプション

ソルト

暗号化の友、ソルトの指定はこうする

$hashids = new Hashids\Hashids('this is salt');
$encodeId = $hashids->encode(1);
// → O3d

「this is salt」の部分を変更することで、自分だけのハッシュ値を生成できる

文字数

出力されるハッシュの文字数を指定

$hashids = new Hashids\Hashids('this is salt',10);
$encodeId = $hashids->encode(1);
// → Od3dEj39fD

暗号化記号

ハッシュの記号は、デフォルトでは大文字小文字を含んだ英数字「abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890」から使用される

これを変更するには以下のように指定する

$hashids = new Hashids\Hashids('this is salt',10,'abcdefg012345');
$encodeId = $hashids->encode(1);
// → 5b01dfa3e4