PHPでランダムな文字列を生成する3つの方法【bin2hex・sha1・uniqid】
PHPでの開発では、確認用トークンや一時的なID、パスワードの初期値など、ランダムな文字列を生成したい場面がよくあります。本記事では、PHPでランダム文字列を作成できる代表的な3つの方法を、サンプルコードと実行結果つきでわかりやすく解説します。
方法1:bin2hex関数とrandom_bytes関数を使う
サンプルコード
<?php
$num = 12;
$res = bin2hex(random_bytes($num));
print_r("生成されたランダム文字列 : ");
echo $res;
?>
実行結果
生成されたランダム文字列 : f1db16115fa93b98493d388b
まず、生成するバイト数(ここでは12バイト)を変数$numに定義します。内部ではrandom_bytes()関数が暗号学的に安全な乱数バイト列を生成し、bin2hex()関数がそのバイナリデータを16進数の文字列へ変換します。結果として、指定したバイト数の2倍の長さの英数字文字列が得られます。暗号強度の高い乱数を利用しているため、セキュリティが重要な処理にも適した方法です。
方法2:sha1ハッシュ関数を使う
サンプルコード
<?php
$my_str = rand();
$res = sha1($my_str);
print_r("sha1ハッシュで生成したランダム文字列 : ");
echo $res;
?>
実行結果
sha1ハッシュで生成したランダム文字列 : 9a4a73c35ac034832332977f3d5accd8eace5260
まずrand()関数を呼び出してランダムな整数を取得し、その値をsha1()関数に渡してハッシュ化します。sha1は常に40桁の16進数文字列を返すため、固定長のランダム風文字列を手軽に作成できます。ただし、ハッシュ関数は同じ入力に対して必ず同じ出力となるため、厳密な予測困難性は保証されません。認証トークンなどのセキュリティ用途には推奨されない点に注意しましょう。
方法3:uniqid関数を使う
サンプルコード
<?php
$res = uniqid();
print_r("uniqid関数で生成したランダム文字列 : ");
echo $res;
?>
実行結果
uniqid関数で生成したランダム文字列 : 5ed4b884cef34
uniqid()関数は、現在の時刻をマイクロ秒単位で基準にした13桁の一意な文字列を返します。コード1行だけで呼び出せる手軽さが最大の魅力です。また、第一引数に接頭辞(プレフィックス)を指定したり、第二引数にtrueを渡してエントロピーを追加すれば、より衝突しにくい一意性の高い文字列を生成することも可能です。
まとめ:使い分けのポイント
- セキュリティ重視(トークンやキーの生成など):random_bytes()+bin2hex()
- 固定長のハッシュ文字列が必要な場合:sha1()(セキュリティ用途は非推奨)
- 手軽に一意なIDを作りたい場合:uniqid()
用途に応じて最適な方法を選び、安全性と可読性の高いコードを心がけましょう。
-
PHPのquoted_printable_encode()関数の使い方を徹底解説
PHPのquoted_printable_encode()関数は、8ビット文字列をquoted-printable形式の文字列に変換するための組み込み関数です。quoted-printableはMIME(Multipurpose Internet Mail Extensions)で定義されているエンコード方式の一つで、主に電子メールで非ASCII文字(日本語など)を安全に送信する際に利用されます。構文quoted_printable_encode(str)パラメータstr − 変換対象となる8ビット文字列を指定します。この引数は必須です。戻り値quoted_printable_encode()
-
PHPのquoted_printable_decode()関数とは?使い方とサンプルコードを解説
PHPのquoted_printable_decode()関数は、quoted-printable形式でエンコードされた文字列を、8ビット文字列にデコードするために使用されます。メール本文などで使われるquoted-printableエンコーディングを元に戻したい場合に便利な関数です。 構文 quoted_printable_decode(str) パラメータ str − デコード対象となる入力文字列を指定します。 戻り値 quoted_printable_decode()関数は、デコード後の8ビットASCII文字列を返します。 使用例 以下は、quoted_printable_dec