使用 richard@zend.com 在這些使用者註解頂部提到的 srand() 種子「(double)microtime()*1000000」。
使用任何其他種子最顯著的影響是,您的隨機數在每次調用指令碼時,往往會遵循相同或非常相似的序列。
請注意以下指令碼
<?php
srand($val);
echo rand(0, 20) . ", ";
echo rand(0, 20) . ", ";
echo rand(0, 20) . ", ";
echo rand(0, 20) . ", ";
echo rand(0, 20);
?>
如果您使用常數(例如:數字 5 ($val = 5))設定產生器的種子,則產生的序列始終相同,在這種情況下(0、18、7、15、17)(至少對我而言是這樣,不同的處理器/處理器速度/作業系統/作業系統版本/PHP 版本/網路伺服器軟體可能會產生不同的序列)。
如果您使用 time() 設定產生器的種子,則序列會更加隨機,但非常接近的調用會有相似的輸出。
如 richard@zend.com 上述建議,最佳的種子是 (double) microtime() * 1000000,因為這提供了最大的虛擬隨機性。事實上,它足夠隨機,適合大多數使用者。
在 1 到 20 之間的 100000 個隨機數的測試程式中,結果相當平衡,每個數字的平均結果為 5000 個,誤差約為 100 個。每種情況下的偏差都隨著每次調用而變化。