PHPでランダムに近い値を出力する

PHP

初めまして、6月に入社した開発部の西川と申します。
今回の記事では、PHPで乱数を作成する方法をご紹介します。
乱数とは、一般に法則性の無い「無作為」に作成される値という意味で作為性の無いものを指します。
PHPを普段から使われる方にとっては、疑似ランダム関数と呼ばれるmt_rand()関数がなじみ深いと思います。

こちらの関数は実行するタイミングによってランダムな値を返すという関数です。
処理の中で省略されているだけで内部的にseed値なるものが設定されております。
処理されるタイミングによってseed値は自動設定されるますが、mt_srand()でseed値を固定してやることで同一の値を返し続けることができます。
この辺りが疑似ランダムと言われる所以になります。

先述の通りseed値はphp4.2以降で自動的に割り当てられますので実質ランダムです。
大変便利です。まずは、よく使われる乱数の生成を記載します。

ajax.php


冒頭でお伝えしたmt_rand()を使用します。

index.html

上記のHTMLの部分は、人のアクションを明確にする為に用意いたしました。

「コンテンツが表示されてからボタンが押されるまでの時間」が人の行動となります。
アクションによっては更にランダム性を高めることできます。
上記のHTMLから送信されたデータを元に乱数を作成致します。

ajax.php

先述のHTML内のajaxを実行します。
乱数が生成されます。

この様な処理を挟む事で、mt_rand()のみで乱数を取得する時に比べてデータにバラつきを出すことができます。実際の実装の際には、seed値をphpなどで内部的に処理すると隠すことも可能です。

※上記の実装は、seed値に依存するものであり完全なランダムではありませんので暗号学的な処理には適しません。

jaJapanese