rand

乱数を生成する

説明

int rand()
int rand(int $min, int $max)

オプションの引数 min,max を省略してコールした場合、rand は 0 と getrandmax の間の擬似乱数(整数)を返します。 例えば、5 から 15 まで(両端を含む)の乱数を得たい場合、 rand(5, 15) とします。

警告

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

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

注意: (Windows のような)いくつかのプラットフォームでは、getrandmax は 32767 と小さな値となっています。 32767 より広い範囲にしたい場合、 min および max を指定することで、 これより大きな範囲の乱数を生成することができます。 もしくは、 mt_rand をかわりに使用してみてください。

注意: PHP 7.1.0 以降、rand は、 mt_rand と同じ乱数生成器を使います。 下位互換性を保持するために、mt_randfalse を返すのと対照的に、randmaxmin よりも小さいことを許します。

パラメータ

min

返す値の最小値 (デフォルトは 0)。

max

返す値の最大値 (デフォルトは getrandmax)。

戻り値

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 までの幅を mt_getrandmax の範囲内におさめる必要があります。 つまり、(max - min) <= mt_getrandmax でなければいけないということです。この範囲をこえてしまうと、 rand が返す値のランダム性が、 低品質になってしまいます。

参考

  • srand
  • getrandmax
  • mt_rand
  • random_int
  • random_bytes