PHP - 伪随机数发生器?

时间:2014-04-06 10:02:42

标签: php random numbers prng

在过去的几天里,我一直试图找到一种基于种子在PHP中生成随机数的好方法。就像我确定你们大多数人已经知道的那样,对于某些情况,php rand()方法太随机了,而且我真的需要一个PRNG让我根据种子一遍又一遍地生成相同的序列号。

我已经尝试过使用XORShift PRNG,问题来自于不同的操作系统似乎因为PHP处理位移而产生不同的答案。

我需要某种适用于PHP的算法,能够产生相当大的数字,因为我会在它前面加零并将其变成一个小的双。 (0.RAND)

1 个答案:

答案 0 :(得分:6)

mt_srand(42);

echo mt_rand(1, 100);
echo mt_rand(1, 100);
echo mt_rand(1, 100);

这会在我的系统上生成序列64,80,96。每次执行此代码时都会这样做。您使用特定数字(此处为42)为发生器播种一次,然后再次调用生成器以生成随机数。


随机数生成器(真正不可预测的随机性)无法播种并产生真正不可预测的随机数。计算机通常无法做到这一点,因为随机性正是他们所做的。计算机是确定性的,不能产生真正的随机性。你需要做一些事情,比如测量放射性衰变,以产生真正的随机性。

随机数生成器出现在它的表面上,表现为随机,但它们不是。它们以一个数字开头,然后对该数字应用确定性数学运算来改变它并产生不同的数字。每次调用生成器时,它将根据其最后一个数字生成一个新数字。因此,PRNG的顺序始终相同。良好的PRNG以这样的方式应用操作,即序列看起来非常随机分布。通常情况下,它们会播放类似于时间的内容,因此如果您没有明确地播种它们,它们会随机出现。如果你用特定值为它们播种,它们将产生一个固定的预定数字序列。