この記事はパスワードなどで利用するランダムな文字列を生成する方法を紹介します。
ランダムで利用する文字列作成
まずはどんな文字を出力に含めるかを取得する関数を用意します。
以下に紹介する生成で使います。
function getStr(): array
{
return array_merge(range('A', 'Z'), range('a', 'z'), range('0', '9'));
}
PHPランダム文字生成
mt_rand()を使う
誰もが最初に思いつくロジックですね。
- 任意の文字列長まで生成可能
- 同じ文字が利用される可能性がある
$str = getStr();
$$randomStr = '';
for ($i = 0 ; $i > $length ; $i++) {
$$randomStr .= $str[mt_rand(0, count($str) - 1);
}
PHPstr_shuffle()を使う
- getStr()で生成される文字列長まで生成可能(今回は62文字)
- 同じ文字は利用されない
$randomStr = substr(str_shuffle(implode('', getStr())), 0, $length);
PHPRandomizerを使う
この記事で紹介したかった一番の機能がこれです。
PHP8.2から追加されたRandomizerに、PHP8.3で文字列からランダムにバイト列を取得するgetBytesFromStringメソッドが追加されました。
- 任意の文字列長まで生成可能
- 同じ文字が利用される可能性がある
$randomizer = new \Random\Randomizer();
$randomStr = $randomizer->getBytesFromString(implode('', getStr()), $length);
PHPLaravelのStr::random()を使う
Laravelを利用している場合は、Str::random()
が利用できます。
- どの文字を利用するか指定ができない(英語大文字のみなどは不可能)
- 同じ文字が利用される可能性がある
- 任意の文字列長まで生成可能
use Illuminate\Support\Str;
$random = Str::random(40);
PHP最後に
上記以外にもmd5(uniqid())
を使ったり、openssl
を使ったりと方法はいくつかありますが、実際に利用できそうなものを紹介しました。
デフォルトのパスワードを生成したり、ユニークなIDを発行したりと、稀に利用するので、開発環境などに合わせた方法を選択してみてください。
コメント