PHPで乱数を生成する方法(rand,mt_rand)

  • このエントリーをはてなブックマークに追加
  • Pocket

スポンサードリンク

PHPで乱数を生成する関数はrand()mt_rand()がありますが、mt_rand()の方が「よりよい乱数」を生成するとして推奨されています。

基本的な使い方から、乱数を使ったサンプルをご紹介します。

 

mt_rand関数で乱数生成

よりよい乱数を生成する関数です。

rand()より高速で、優れた乱数を生成してくれるので、乱数生成にはmt_rand()を使うようにしましょう。

mt_randの使い方

以下リンクよりサンプルページを開いて動作確認してみましょう。

 

サンプルはこちら

 乱数の範囲を指定する

桁数を揃えたり、サイコロのような特定の範囲で乱数を生成する場合は、範囲も指定できます。

以下リンクよりサンプルページを開いて動作確認してみましょう。

 

サンプルはこちら

mt_randの構文

mt_rand (最小値, 最大値(省略可));

mt_rand()の最小値と最大値は省略できます。

その場合、乱数は0mt_getrandmax()の数値まで、ランダムに生成されます。

ちなみに、mt_rand()でパスワードなどの暗号生成は暗号学的にも安全ではないため、やめましょう。

mt_getrandmaxで乱数の最大値を確認する

mt_rand()の最大値を調べるには、mt_getrandmax()を使います。

2147483647

わたくしの環境では上記の最大値が表示されました。

mt_getrandmax()は最大値を以下のように算出しています。

2 ^ 31 – 1
(2 の 31乗 から -1)

なお、64ビット版PHPで2^32を超えると、乱数が偶数寄りになるとマニュアルにも記載されています。

注意しましょう。

mt_randでファイル名をランダムに生成

ファイル名をそのままアップロードなどすると、セキュリティ上問題があったり、ファイル名が重複する場合もあるでしょう。

そんなときは、mt_rand()の乱数にsha1などのハッシュ値、UNIXタイムスタンプなどを組み合わせたファイル名にするなど、ランダムに他の名前とダブらないような名前になるようにします。

以下に2つのパターンをご紹介します。

上記2パターンのサンプルは、以下のリンクを開いてご確認ください。

 

サンプルはこちら

 

rand関数(非推奨)

rand()は非推奨です。よりよい乱数値を生成するmt_rand()を使いましょう。

ちなみに、rand()の最大値を調べるにはgetrandmax()を使いますが、Windowsなどの一部環境では最大値が32767となります。

それ以上の乱数を生成したい場合は、最大値を設定するか、mt_rand()を使うようにしましょう。

スポンサードリンク

  • このエントリーをはてなブックマークに追加
  • Pocket

コメント

  1. 麩菓子 より:

    「よりよい」が「よりより」になってますよ

    1. flatFlag より:

      ホントですね!
      大変失礼いたしました、訂正させていただきました。
      ご指摘ありがとうございます。

麩菓子 へ返信する コメントをキャンセル

*