我需要生成用於訪問我的網站的人的僞隨機代碼。我寫了一些代碼來允許這樣做,但沒有意識到我使用字符數組而不是整數作爲種子(以使mt_rand可重複)。我的演示代碼是在這裏:mt_rand使用字符作爲種子
$seedVal = array(6565866669, 6565866670, 6565866671);
foreach ($seedVal as $seed) {
mt_srand($seed);
$rnd = '';
for ($i = 0; $i < 11; $i++) { // Loop over the string length
$tmp = mt_rand(0, 10);
$rnd .= $tmp;
}
echo "Seed = $seed, RandNum = $rnd </br>";
}
echo "</br>Now with character seeds</br>";
$seedVal = array('6565866669', '6565866670', '6565866671');
foreach ($seedVal as $seed) {
mt_srand($seed);
$rnd = '';
for ($i = 0; $i < 11; $i++) { // Loop over the string length
$tmp = mt_rand(0, 10);
$rnd .= $tmp;
}
echo "Seed = $seed, RandNum = $rnd </br>";
}
return;
上的1and1結果是:
Seed = 6565866669, RandNum = 425453109319
Seed = 6565866670, RandNum = 39388593858
Seed = 6565866671, RandNum = 891273965110
Now with character seeds
Seed = 6565866669, RandNum = 97138956767
Seed = 6565866670, RandNum = 97138956767
Seed = 6565866671, RandNum = 97138956767
但在其他地方,結果(本地主機,其他服務器等):
Seed = 6565866669, RandNum = 425453109319
Seed = 6565866670, RandNum = 39388593858
Seed = 6565866671, RandNum = 891273965110
Now with character seeds
Seed = 6565866669, RandNum = 425453109319
Seed = 6565866670, RandNum = 39388593858
Seed = 6565866671, RandNum = 891273965110
問題是在我現在的服務器上(1and1)系統工作正常(使用不可預測的字符輸入)。但是我正在遷移到一臺新的服務器上,當然,這些代碼看起來像是第一套。換句話說,我不知道如何生成第二組隨機數(使用字符數組播種)。
誰能告訴我如何做到這一點?
我想:
mt_srand('6565866669');
echo mt_rand(0, 10);
返回
97138956767
掙扎。謝謝!!
它們是字符串,它應該沒問題,因爲PHP會隱式地將它們轉換爲整數。運行新服務器的是哪個版本的php? (調用'php_info()'或者在命令行上運行'php -v')。 –
1and1使用PHP版本5.2.17。我的本地主機是PHP版本5.4.4 – zbinsd
任何機會是新的服務器32位,而舊的64位? –