mt_rand

メルセンヌ・ツイスター乱数生成器を介して乱数値を生成する

説明

int mt_rand()
int mt_rand(int $min, int $max)

古い libc の多くの乱数発生器は、怪しげであるか特性が不明であったりし、 また低速でした。 mt_rand 関数は、古い rand の代替品となるものです。 この関数は、その特性が既知の乱数生成器 »  メルセンヌ・ツイスター を使用し、 平均的な libc の rand()よりも 4 倍以上高速に乱数を生成します。

オプションの引数 min,max を付けずに コールした場合、mt_rand は 0 から mt_getrandmax の間の擬似乱数値を返します。 例えば、5 から 15 まで(端点を含む)の間の乱数値を得たい場合には mt_rand(5, 15) としてください。

警告

この関数が生成する値は、暗号学的にセキュアではありません。そのため、これを暗号や、戻り値を推測できないことが必須の値として使っては いけません

暗号学的にセキュアな乱数が必要な場合は、Random\RandomizerRandom\Engine\Secure と一緒に使いましょう。簡単なユースケースの場合、random_intrandom_bytes 関数が、オペレーティングシステムの CSPRNG を使った、 便利で安全な API を提供します。

パラメータ

min

オプションで指定する、返される値の最小値 (デフォルトは 0)。

max

オプションで指定する、返される値の最大値 (デフォルトは mt_getrandmax)。

戻り値

min (あるいは 0) から max (あるいは mt_getrandmax、それぞれ端点を含む) までの間のランダムな整数値を返します。 maxmin より小さい場合は false を返します。

変更履歴

バージョン 説明
7.2.0 mt_rand 関数の モジュロバイアスに関するバグが 修正されました。 これは、特定のシードを用いて生成したシーケンスは、64bit マシン上での PHP 7.1 と出力が異なる可能性があることを意味します。
7.1.0 rand は、mt_randエイリアスになりました。
7.1.0 mt_rand は、固定の、正しいバージョンのメルセンヌツイスタ の アルゴリズム を使うように 更新されました。 古い振る舞いに戻すには、 mt_srand 関数の第二引数に MT_RAND_PHP を指定して使ってください。

例1 mt_rand の例

<?php
echo mt_rand(), "\n";
echo mt_rand(), "\n";

echo mt_rand(5, 15), "\n";
?>

上の例の出力は、 たとえば以下のようになります。

1604716014
1478613278
6

注意

警告

min から max までの幅を mt_getrandmax の範囲内におさめる必要があります。 つまり、(max - min) <= mt_getrandmax でなければいけないということです。この範囲をこえてしまうと、 mt_rand が返す値のランダム性が、 本来あるべき姿よりも低くなってしまいます。

参考

  • mt_srand
  • mt_getrandmax
  • random_int
  • random_bytes