mt_rand
(PHP 4, PHP 5, PHP 7)
mt_rand — メルセンヌ・ツイスター乱数生成器を介して乱数値を生成する
説明
mt_rand ( ) : int
mt_rand
( int $min
, int $max
) : int
警告 この関数が生成する値は、暗号学的に安全ではありません。そのため、これを暗号として使ってはいけません。暗号学的に安全な値が必要な場合は、random_int() か random_bytes() あるいは openssl_random_pseudo_bytes() を使いましょう。
古い libc の多くの乱数発生器は、怪しげであるか特性が不明であったりし、 また低速でした。 mt_rand() 関数は、古い rand() の代替品となるものです。 この関数は、その特性が既知の乱数生成器 [http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html » メルセンヌ・ツイスター] を使用し、 平均的な libc の rand()よりも 4 倍以上高速に乱数を生成します。
オプションの引数
min
,max
を付けずに
コールした場合、mt_rand() は 0 から
mt_getrandmax() の間の擬似乱数値を返します。
例えば、5 から 15 まで(端点を含む)の間の乱数値を得たい場合には
mt_rand(5, 15)
としてください。
返り値
min
(あるいは 0)
から max
(あるいは mt_getrandmax()、それぞれ端点を含む)
までの間のランダムな整数値を返します。
max
が min
より小さい場合は
false
を返します。
変更履歴
バージョン | 説明 |
---|---|
7.2.0 | mt_rand() 関数の
モジュロバイアスに関するバグが 修正されました。 これは、特定のシードを用いて生成したシーケンスは、64bit マシン上での PHP 7.1 と出力が異なる可能性があることを意味します。 |
7.1.0 | rand() は、mt_rand() の |
7.1.0 | mt_rand() は、固定の、正しいバージョンのメルセンヌツイスタ の アルゴリズム を使うように
更新されました。
古い振る舞いに戻すには、
mt_srand() 関数の第二引数に
|
例
例1 mt_rand() の例
<?phpecho mt_rand() . "\n";echo mt_rand() . "\n";echo mt_rand(5, 15);?>
上の例の出力は、 たとえば以下のようになります。
1604716014 1478613278 6
注意
警告
min
から max
までの幅を mt_getrandmax() の範囲内におさめる必要があります。
つまり、(max
-
min
) <= mt_getrandmax()
でなければいけないということです。この範囲をこえてしまうと、
mt_rand() が返す値のランダム性が、
本来あるべき姿よりも低くなってしまいます。
参考
- mt_srand() - メルセンヌ・ツイスター乱数生成器にシードを指定する
- mt_getrandmax() - 乱数値の最大値を表示する
- random_int() - 暗号論的に安全な疑似乱数を生成する
- random_bytes() - 暗号論的に安全な、疑似ランダムなバイト列を生成する
- openssl_random_pseudo_bytes() - 疑似ランダムなバイト文字列を生成する
- rand() - 乱数を生成する