【PHP8.x】rand関数の使い方

rand関数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

rand関数は、擬似乱数を生成する関数です。この関数は、引数を指定しない場合、0からPHPがサポートする最大値までの範囲でランダムな整数を返します。通常、この最大値はgetrandmax()関数で確認できます。

2つの整数引数 minmax を指定すると、rand関数は min 以上 max 以下の範囲でランダムな整数を生成して返します。例えば、rand(1, 10)と記述すると、1から10までのいずれかの整数がランダムに選ばれます。minmaxよりも小さい値である必要があります。

PHP 7.1.0以降、rand()関数は mt_rand() 関数のエイリアスとして実装されています。これは、mt_rand()関数がより高品質な擬似乱数を生成し、統計的な偏りが少なく、一般的にパフォーマンスも優れているためです。そのため、新しいコードを記述する際には、rand()ではなくmt_rand()関数を使用することが公式に推奨されています。この変更により、rand()を使用しても実質的にmt_rand()と同じ高品質な乱数が得られますが、コードの意図を明確にするためにもmt_rand()の使用が望ましいとされています。

構文(syntax)

1<?php
2echo rand(1, 100);

引数(parameters)

int $min, int $max

  • int $min: 生成する乱数の最小値を指定する整数
  • int $max: 生成する乱数の最大値を指定する整数

戻り値(return)

int

指定された範囲内のランダムな整数を返します。

サンプルコード

PHPで指定範囲の乱数を生成する

1<?php
2
3/**
4 * 最小値と最大値の間の一様分布の整数を生成する.
5 *
6 * より安全な乱数生成が必要な場合は、random_int 関数を使用することを推奨します。
7 *
8 * @param int $min 最小値
9 * @param int $max 最大値
10 *
11 * @return int 乱数
12 */
13function generateRandomInteger(int $min, int $max): int
14{
15    return rand($min, $max);
16}
17
18// 使用例
19$randomNumber = generateRandomInteger(1, 100);
20echo "ランダムな整数: " . $randomNumber . PHP_EOL;

PHPのrand関数は、指定された最小値$minと最大値$maxの間の整数をランダムに生成するために使用されます。この関数は、一様分布に基づいた乱数を返します。

上記のサンプルコードでは、generateRandomIntegerという関数を定義し、rand関数を利用して乱数を生成しています。generateRandomInteger関数は、最小値$minと最大値$maxを引数として受け取り、これらの値の範囲内でランダムな整数を返します。

rand($min, $max)は、$min以上$max以下の整数値を返します。例えば、rand(1, 100)と記述した場合、1から100までのいずれかの整数値がランダムに返されます。

このサンプルコードでは、生成された乱数を画面に出力する例を示しています。echo "ランダムな整数: " . $randomNumber . PHP_EOL;という行は、「ランダムな整数: 」という文字列と生成された乱数$randomNumberを連結して表示し、最後に改行コードPHP_EOLを追加しています。

なお、より安全な乱数生成が必要な場合は、rand関数ではなくrandom_int関数の使用が推奨されています。random_int関数は、暗号学的に安全な乱数生成器を使用しているため、予測困難な乱数を生成できます。

rand関数は、指定された範囲内で乱数を生成しますが、暗号論的に安全ではありません。セキュリティが重要な場面では、より安全なrandom_int関数の使用を検討してください。rand関数は、予測可能な乱数を生成する可能性があるため、例えばパスワード生成などには適していません。$min$maxより大きい場合、rand関数は予期せぬ動作をする可能性があります。$min$maxの値を適切に設定してください。また、PHPのバージョンによっては、乱数生成器の初期化が必要な場合がありますが、PHP 7.1.0以降では自動的に初期化されるため、通常は気にする必要はありません。

PHPでランダム文字列を生成する

1<?php
2
3/**
4 * ランダムな文字列を生成する.
5 *
6 * @param int $length 生成する文字列の長さ
7 *
8 * @return string ランダムな文字列
9 */
10function generateRandomString(int $length = 16): string
11{
12    $characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
13    $charactersLength = strlen($characters);
14    $randomString = '';
15    for ($i = 0; $i < $length; $i++) {
16        $randomString .= $characters[rand(0, $charactersLength - 1)];
17    }
18    return $randomString;
19}
20
21// 使用例
22$randomString = generateRandomString(20);
23echo "ランダムな文字列: " . $randomString . PHP_EOL;

PHPでランダムな文字列を生成する方法について解説します。このサンプルコードでは、rand()関数を利用して、指定された長さのランダムな文字列を生成するgenerateRandomString()関数を定義しています。

generateRandomString()関数は、引数として生成する文字列の長さを指定します。省略した場合はデフォルトで16文字の文字列が生成されます。関数内部では、まず、ランダム文字列に使用する文字セット(アルファベットと数字)を定義しています。次に、strlen()関数で文字セットの長さを取得し、rand()関数を使って、0から文字セットの長さ-1までの範囲でランダムな整数を生成します。

rand()関数は、引数として最小値と最大値を指定し、その範囲内のランダムな整数を返します。ここでは、文字セットのインデックスとして使用するために、rand(0, $charactersLength - 1)のように指定しています。

ループ処理の中で、rand()関数で生成されたインデックスを使用して、文字セットからランダムな文字を1文字ずつ抽出し、文字列に連結していきます。この処理を指定された文字列の長さになるまで繰り返すことで、ランダムな文字列が生成されます。

最後に、生成されたランダムな文字列を関数の戻り値として返します。サンプルコードでは、generateRandomString(20)として、20文字のランダムな文字列を生成し、echo文で結果を出力しています。このコードを実行すると、「ランダムな文字列: 」に続けて、生成された20文字のランダムな文字列が表示されます。

rand()関数は、指定された範囲の整数をランダムに生成します。サンプルコードでは、rand(0, $charactersLength - 1)0から文字数-1までの範囲を指定しています。$charactersLength - 1としないと、範囲外アクセスになる可能性があります。

このコードはあくまで一例であり、セキュリティ要件が高いシステムでは、より安全なrandom_int()関数の利用を検討してください。random_int()は予測が難しく、暗号論的に安全な乱数を生成できます。また、rand()は予測可能性があり、セキュリティが重要な場面での利用は避けるべきです。

関連コンテンツ