2012-01-05 35 views
4

PHP隨機數是否可預測?如果是這樣,預測在1到32範圍內的隨機數有多難?有什麼辦法讓它變得不可預測?PHP mt_rand()函數

<?php 
function rand_best($min, $max) { 
    $generated = array(); 
    for ($i = 0; $i < 100; $i++) { 
     $generated[] = mt_rand($min, $max); 
    } 
    shuffle($generated); 
    $position = mt_rand(0, 99); 
    return $generated[$position]; 
} 
?> 
+3

由於使用'mt_rand()'寫的東西,你應該在[梅森倍捻機(HTTP讀了起來: //en.wikipedia.org/wiki/Mersenne_twister)算法,如果你想知道它是如何工作的。 – DaveRandom 2012-01-05 11:49:09

+1

此外,'mt_rand()'提供比'rand()'更好的質量(明顯有缺陷)。順便說一句,*不隨機*,*不統一*和*可預測*是非常不同的概念:如果您不知道種子,則無法預測下一個數字。 – 2012-01-05 11:53:15

回答

6

關於編程中隨機隨機函數的討論是古老的。

看看這個:http://en.wikipedia.org/wiki/Random_number_generation

反正。隨機函數今天非常好,以至於它們(我會稱之爲)儘可能接近於隨機函數。沒有辦法預測1,32之間的結果(或者爲此目的任何其他數字)。這筆交易的數字並不是真正的隨機數,因爲電腦不能做這樣的操作。

我想說的蘭特功能是綽綽有餘更多的好,除非你是爲五角大樓

+0

某些電腦有硬件設備產生真正的隨機數字。 – 2012-01-05 11:54:16

+1

的確如此。我讀過這個頁面http://www.random.org/randomness/(應該閱讀!),他們使用放射源,因爲它們確實是隨機的。 – OptimusCrime 2012-01-05 12:04:29

+0

我認爲一些最新的英特爾處理器有一個隨機生成的特權指令。 – 2012-01-05 12:10:43

2

假設Linux系統,你可以用/dev/urandom種子的僞隨機數生成器(或讀取),或者可能/dev/random(注意,它可以阻止)。