2012-01-05 82 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(注意,它可以阻止)。