乱数を生成する

# rand

(PHP 4, PHP 5, PHP 7, PHP 8)

rand — 乱数を生成する

### 説明

function rand(): int
function rand(int `$min`, int `$max`): int

オプションの引数 `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())。

### 戻り値

`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() が返す値のランダム性が、 低品質になってしまいます。

### 参考

- srand() - 乱数生成器を初期化する
- getrandmax() - 乱数の最大値を取得する
- mt_rand() - メルセンヌ・ツイスター乱数生成器を介して乱数値を生成する
- random_int() - 暗号学的にセキュアな方法で、等確率に出る整数を取得する
- random_bytes() - 暗号学的にセキュアな、ランダムなバイト列を生成する

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open