OS または PHP のバージョン間で乱数が同じであるという保証はありません。したがって、このブログ投稿で指摘されているように、独自の疑似乱数ジェネレーターを作成することをお勧めします。
コードは次のとおりです。
<?php
class Random {
// random seed
private static $RSeed = 0;
// set seed
public static function seed($s = 0) {
self::$RSeed = abs(intval($s)) % 9999999 + 1;
self::num();
}
// generate random number
public static function num($min = 0, $max = 9999999) {
if (self::$RSeed == 0) self::seed(mt_rand());
self::$RSeed = (self::$RSeed * 125) % 2796203;
return self::$RSeed % ($max - $min + 1) + $min;
}
}
// set seed
Random::seed(42);
// echo 10 numbers between 1 and 100
for ($i = 0; $i < 10; $i++) {
echo Random::num(1, 100) . ',';
}
echo "\n";
for ($i = 0; $i < 10; $i++) {
echo Random::num() . ',';
}
echo "\n";
結果は次のとおりです。
76,86,14,79,73,2,87,43,62,7,
393758,1684299,822150,2105442,337168,202955,203548,277673,1154689,1729772,
そして明らかに、異なる PHP バージョン間で一貫した結果が得られます。シードを提供する必要があることに注意してください。そうしないと、この関数はフォールバックしmt_rand
、再び OS に翻弄されます!