PHP MT srand:一個用于生成偽隨機數的函數,可在單個維度中生成隨機數序列。該函數能夠為并行隨機數生成器的每個實例生成獨立的序列。
MT_rand和srand略有不同,主要在于隨機數生成器的實現方式。srand種子是由系統隨機選擇的,而MT_srand接受手動輸入的種子。以下是三個不同的種子下所生成的隨機數序列:
//設置種子 mt_srand(12345); //生成6個隨機數 echo mt_rand() . "\n"; echo mt_rand() . "\n"; echo mt_rand() . "\n"; echo mt_rand() . "\n"; echo mt_rand() . "\n"; echo mt_rand() . "\n"; //重新設定種子 mt_srand(12345); //再次生成6個隨機數 echo mt_rand() . "\n"; echo mt_rand() . "\n"; echo mt_rand() . "\n"; echo mt_rand() . "\n"; echo mt_rand() . "\n"; echo mt_rand() . "\n"; //使用srand和rand() srand(12345); echo rand() . "\n"; echo rand() . "\n"; echo rand() . "\n"; echo rand() . "\n"; echo rand() . "\n"; echo rand() . "\n";
應該注意到,MT_srand在同樣的種子下生成相同的隨機序列,而srand卻不然。這是由于MT_srand使用了更高級別的隨機算法。
MT_srand可用于生成隨機化的數據結構(如散列表或跳表)的初始值,以避免惡意用戶構造相應的輸入數據。例如:
//生成“SALT”值 $SESSION['SALT'] = mt_rand(); //加鹽哈希密碼 $_POST['password'] = hash('sha512', $_POST['password'] . $SESSION['SALT']);
使用MT_srand可以為生成器單獨指定種子,以便在并行隨機數生成器中生成不同的隨機數序列。例如,當使用有多個在線用戶的網站時,可以為每個用戶單獨設置MT_srand。
//為當前用戶設置種子 mt_srand($USER_ID); //生成隨機數 echo mt_rand();
總結:MT_srand是PHP用于生成偽隨機數的重要函數,其可用于生成隨機化的數據結構和設置并行隨機數生成器。同時也應注意到MT_srand和srand在實現上有所不同,因此使用時需要注意選擇適當的函數。