BLOG
【PHP】簡単にランダムな英数字を生成する方法
【PHP】簡単にランダムな英数字を生成する方法
独自のIDの生成や仮パスワードの発行など、PHPでプログラムを書いているとランダムな英数字を生成したいことはよくあります。
- とにかくシンプルなコードでランダム英数字を生成したい
- 英数字の重複なしでランダム英数字を生成したい
- 英数字の重複ありでランダム英数字を生成したい
この記事では、できる限りシンプルな方法で、任意の桁数のランダムな英数字を生成する方法について解説します。
ランダムな英数字を生成するコード
英数字の重複なしの場合
// 使用する英数字を変数$charに指定
$chars = 'abcdefghijklmnopqrstuvwxyz0123456789';
// ランダムな英数字を生成(7桁)
$randomStr = substr(str_shuffle($chars), 0, 7);
使用している関数について、補足説明をします。
まず、str_shuffle関数で、ランダムな英数字の生成に使用したい文字(=$chars)をランダムに並び替えます。
その後、substr関数で必要な桁数分、英数字を切り出しています。関数の引数については以下の通りです。
substr(文字列, 切り出し位置, 桁数);
切り出し位置については、先頭から0, 1, 2, …となり、今回は“0”を指定しているので、ランダムに並び替えた英数字を先頭から7桁分切り出して、変数$randomStrに格納します。
英数字は既にランダムに並べ替えてあるので、切り出す位置は何桁目からでも問題ありません。
英数字の重複ありの場合
// 使用する英数字を変数$charに指定
$chars = 'abcdefghijklmnopqrstuvwxyz0123456789';
// ランダムな英数字を生成(7桁)
$randomStr = substr(str_shuffle(str_repeat($chars, 7)), 0, 7);
重複なしの場合とほぼ同じですが、同じ英数字を使用するために、初めにstr_repeat関数で使用する英数字を任意の回数繰り返し、連結させます。
str_repeat(文字列, 繰り返し回数);
例えば、str_repeat(‘abc’, 3)であれば、‘abcabcabc’が出力されます。
ランダムな英数字を生成する際の繰り返し回数=重複可能回数なので、任意の数を指定してください。今回は英数字の重複回数に制限を設けないため、桁数と同じ“7”を指定しています。
おわりに
生成する英数字に「小文字だけでなく大文字も含めたい」といった場合は、変数$charsを編集して含めたい文字を指定してください。
参考までに、JavaScriptで同様にランダムな英数字を生成する方法を解説した記事を貼っておきます。