PHP Rand() 函数如何工作?

phe*_*gen 0 php arrays random function

我想知道 PHP Rand() 函数是如何工作的?我的意思是; 这个函数如何在没有任何规则或任何其他随机化函数的情况下随机化数字?

例如我有一个这样的数组:

$numbers = array(0,1,2,3,4,5,6,7,8,9);
Run Code Online (Sandbox Code Playgroud)

那么如何在没有 rand()、array_rand() 等的情况下随机化这些数字。

基本问题是:

随机化函数如何工作?

Kal*_*ion 5

PHPrand()与所有伪随机数生成器一样,不会生成真正的随机数据,而是使用一些数学函数来创建看似随机的数据。

方法可能会有所不同,但基本原则是:

我们将初始值作为“种子”,s。(这可能是当前时间,用户输入的“随机”值,甚至是从某个熵源中获得的真正随机熵)

然后我们取s并应用一个函数,f, 产生一个新值s' (s-prime)(这个函数通常是一个模函数或散列函数)

然后,我们可以重复这一过程循环往复,投入s'到f生产s'',等等。

这个结果序列f是我们的“随机”数字。

但是,希望您意识到,f保持不变,并且在给定相同输入的情况下始终会产生相同的输出。

因此,如果我们给它相同的起始种子s,我们将始终得到相同的s', s'', s'''...

这就是我们称它们为“伪”随机的原因。如果你不知道起始种子并且没有观察太长时间的序列,它似乎是随机的。但是如果我们知道使用的函数f和起始种子,s我们就可以预测每个值rand()会产生。