[PHP]ランダム文字を生成する

PHP PHP
主にPHPに関する記事

この記事はパスワードなどで利用するランダムな文字列を生成する方法を紹介します。

ランダムで利用する文字列作成

まずはどんな文字を出力に含めるかを取得する関数を用意します。

以下に紹介する生成で使います。

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);
}
PHP

str_shuffle()を使う

  • getStr()で生成される文字列長まで生成可能(今回は62文字)
  • 同じ文字は利用されない
$randomStr = substr(str_shuffle(implode('', getStr())), 0, $length);
PHP

Randomizerを使う

この記事で紹介したかった一番の機能がこれです。

PHP8.2から追加されたRandomizerに、PHP8.3で文字列からランダムにバイト列を取得するgetBytesFromStringメソッドが追加されました。

  • 任意の文字列長まで生成可能
  • 同じ文字が利用される可能性がある
$randomizer = new \Random\Randomizer();
$randomStr = $randomizer->getBytesFromString(implode('', getStr()), $length);
PHP

LaravelのStr::random()を使う

Laravelを利用している場合は、Str::random()が利用できます。

  • どの文字を利用するか指定ができない(英語大文字のみなどは不可能)
  • 同じ文字が利用される可能性がある
  • 任意の文字列長まで生成可能
use Illuminate\Support\Str;

$random = Str::random(40);
PHP

最後に

上記以外にもmd5(uniqid())を使ったり、opensslを使ったりと方法はいくつかありますが、実際に利用できそうなものを紹介しました。

デフォルトのパスワードを生成したり、ユニークなIDを発行したりと、稀に利用するので、開発環境などに合わせた方法を選択してみてください。

コメント

タイトルとURLをコピーしました