【PHP】シンプルな乱数の生成【忘備録】

スポンサーリンク
programmingPHP
スポンサーリンク

はじめに

タイトルにシンプルな乱数と書きましたが、この乱数を暗号に利用することは絶対にないようにしてください。

久々にPHPで作業をしていてコピペできるものが欲しかったので忘備録に残します。参考になれば幸いです。

乱数の生成

乱数を生成するのは次の1行です。

mt_rand();

これだけで乱数そのものは生成することができます。

範囲を指定して乱数を生成する

範囲を指定する場合には次のように引数を与えます。

mt_rand(最小値,最大値);

これで指定した最小値から最大値までの乱数を生成することができます。

負の値も指定可能です。

特定の数を除外した乱数を生成する

例えば-10から10までの範囲で0のみを除外したい場合には次のように、-10から9までの乱数を生成して0以上であれば1を加えてやれば良いです。

$var = mt_rand(-10,9); //-10から9までの乱数を生成

if($var >= 0){ //0以上であれば1を加える

	$var++;
}

echo $var; //出力

複数の数値を除外したい場合にも基本的な考え方を同じにして次のようにしてやれば良いです。

例:「-20から20までの数のうち-4、1、8を除外したもの」

$var = mt_rand(-20,17); //-20から17までの乱数を生成

if($var >= -4){ //-4以上であれば1加算
	$var++;
}
if($var >= 1){ //更に1以上であれば1加算
	$var++;
}
if($var >= 8){ //更に8以上であれば1加算
	$var++;
}

echo $var; //出力

ここで最初に生成された乱数に対応する数値が一対一になっていることを確認してください。

  • 「-3」であれば「-2」
  • 「4」であれば「6」
  • 「10」であれば「13」

一対一で対応していないと数が偏ります。

最後に

くれぐれも「mt_rand()」で生成した乱数を暗号などに用いないようにしてください。

生成速度は速いですが、擬似的な乱数なので暗号としてはかなり弱いです。

コメント

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