(PHP 4, PHP 5, PHP 7, PHP 8)
rand — 乱数を生成する
オプションの引数
min,max
を省略してコールした場合、rand() は 0 と
getrandmax() の間の擬似乱数(整数)を返します。
例えば、5 から 15 まで(両端を含む)の乱数を得たい場合、
rand(5, 15) とします。
この関数が生成する値は、暗号学的にセキュアではありません。そのため、これを暗号や、戻り値を推測できないことが必須の値として使っては いけません。
暗号学的にセキュアな乱数が必要な場合は、Random\Randomizer を Random\Engine\Secure と一緒に使いましょう。簡単なユースケースの場合、random_int() と random_bytes() 関数が、オペレーティングシステムの CSPRNG を使った、 便利で安全な API を提供します。
この関数は、乱数のソースとしてグローバルな Mt19937 (メルセンヌ・ツイスター) インスタンスを使用するため、グローバルな Mt19937 を使用する他のすべての関数と状態を共有します。 これらの関数のいずれかを使用すると、スコープに関係なく、すべての他の関数のシーケンスも進みます。
mt_srand() または srand() に既知の値を指定してシードすることで再現可能なシーケンスを生成する場合、この関数からの出力も再現可能になります。
新しく書くコードでは、すべて Random\Randomizer のメソッドを使用することを推奨します。
注意: PHP 7.1.0 より前のバージョンでは、(Windows のような)いくつかのプラットフォームにおいて getrandmax() は 32767 と小さな値となっていました。 32767 より広い範囲にしたい場合、
minおよびmaxを指定することで、 これより大きな範囲の乱数を生成することができます。 もしくは、 mt_rand() をかわりに使用してみてください。
注意: PHP 7.1.0 以降、rand() は、 mt_rand() と同じ乱数生成器を使います。 下位互換性を保持するために、mt_rand() は
falseを返すのと対照的に、rand() はmaxがminよりも小さいことを許します。
min (あるいは 0)
から max (あるいは getrandmax()、それぞれ端点を含む)
までの間の疑似乱数値を返します。
| バージョン | 説明 |
|---|---|
| 7.2.0 | rand() 関数のモジュロバイアスに関するバグが 修正されました。 これは、特定のシードから生成されるシーケンスが 64bit PHP 7.1 のそれとは異なる可能性があるということです。 |
| 7.1.0 | rand() は、mt_rand() の エイリアスになりました。 |
例1 rand() の例
<?php
echo rand(), "\n";
echo rand(), "\n";
echo rand(5, 15), "\n";
?>上の例の出力は、 たとえば以下のようになります。
7771 22264 11
min から max
までの幅を getrandmax() の範囲内におさめる必要があります。
つまり、abs(max - min) <=
getrandmax() でなければいけないということです。
この範囲をこえてしまうと、
rand() が返す値のランダム性が、
低品質になってしまいます。