PHPでランダム文字列を生成する方法をサンプルコード付き解説!

自動でパスワード生成したり、CSRF対策の際にワンタイムトークンを生成するにもランダムな文字列を生成するが必要です。PHPではランダムな文字列を生成するために関数がいくつか用意されています。この記事ではPHPでランダム文字列を生成する方法を解説しています。

コンテンツ [表示]

  1. 1PHPでランダム文字列を生成する方法
  2. 1.1mt_rand関数
  3. 1.2str_shuffle関数
  4. 1.3uniqid関数
  5. 1.4md5関数
  6. 1.5openssl_ramdom_pseudo_bytes関数

PHPでランダム文字列を生成する方法

それではPHPでランダム文字列を生成する方法をサンプルコードを使って、パターンごとに解説していきましょう。

mt_rand関数

// mt_rand関数
$str1 = chr(mt_rand(97, 122));
for($i = 0; $i < 10; $i++){
  $str1 .= chr(mt_rand(97, 122));
}

mt_rand関数は乱数を生成する関数ですが、chr関数と組み合わせて使うことでランダムな文字列を生成することもできます。

chr関数は引数に数値を指定することで1バイトの文字を生成することができます。ASCIIコードによる文字変換が行われるため、97を指定することで「a」、122を指定することで「z」を返してくれます。

mt_rand関数は第一引数で最小値、第二引数で最大値を指定することが出来ます。

よって、mt_rand関数の引数に97,122を指定すると97から122の間でランダムな数字を返してくれるので、そのランダムな数字をchr関数の引数に指定することでaからzの文字をランダムに取得することが出来ます。この方法で取得できるランダムな文字をfor文などを使うことで任意の文字列長のランダムな文字列を生成することが出来ます。

あわせて読みたい
mt_rand関数
PHPのmt_rand関数について紹介している記事になります。mt_rand関数はPHPでいくつか用意されている乱数を生成してくれる関数の1つです。mt_rand関数の概要や具体的な使い方をサンプルコード付きで解説しています。

str_shuffle関数

// str_shuffle関数
$str2 = substr(str_shuffle("ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz0123456789"), 0, 16);

str_shuffle関数は引数に文字列を指定することで、その文字列をランダムにシャッフルした文字列を返してくれます。

今回はstr_shuffle関数の引数に全ての英数字を指定し、返ってきた文字列をsubstr関数で先頭から16文字目までを切り取ることで16文字のランダムな文字列を生成することが出来ます。

あわせて読みたい
str_shuffle関数
PHPのstr_shuffle関数は指定した文字列を1文字ずつランダムにシャッフルした値を返す関数です。str_shuffle関数の構文や使い方をサンプルコード付きで解説します。

uniqid関数

// uniqid関数
$str3 = uniqid();

uniqid関数はマイクロ秒単位の現在時刻にもとづいた一意なIDを生成することが出来ます。デフォルトで戻り値の13文字の文字列が返されます。

 

あわせて読みたい
uniqid関数
PHPのuniqid関数はユニークなIDを生成する関数です。現在の時刻(マイクロ秒)に基づいて、一意となるIDを生成します。uniqid関数の構文や使い方についてサンプルコード付きで解説します。

md5関数

// md5関数
$str4 = md5(uniqid());

先ほど紹介したuniqid関数で生成した一意なID文字列をさらにmd5関数を用いてハッシュ化することでより複雑なランダム文字列を生成することが出来ます。

ハッシュ化とは文字列をあるルールに基づいて(ハッシュ関数)別の文字列へと変換させることであり、ハッシュ化した文字列からハッシュ化する前の元の文字列に戻すことはできません。
そのため、パスワードをDBなどに保存する際にはパスワード文字列をハッシュ化して保存することが多いです。

あわせて読みたい
md5関数
PHPのmd5関数は文字列をハッシュ値を計算して返す関数です。md5関数の構文や使い方をサンプルコード付きで解説します。

openssl_ramdom_pseudo_bytes関数

// opennssl_random_pseudo_bytes関数
$str5 = bin2hex(openssl_random_pseudo_bytes(16));

openssl_ramdom_pseudo_bytes関数はランダムなバイト文字列を生成することが出来ます。生成されたランダムなバイト文字列をbin2hex関数を用いることで16進数文字列へ変換を行っております。

openssl_ramdom_pseudo_bytes関数で生成されるランダムなバイト文字列は暗号学的に安全な文字列なので、CSRF対策を行う際のワンタイムトークンを生成する際に、この手法がよく使われます。

GeekHive採用サイト

関連記事