PHP - 伪随机数生成器


PHP - Pseudo Random Number Generator?

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

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

我需要某种与PHP配合良好的算法,能够生成相当大的数字,因为我无论如何都会在它前面放一个零,然后把它变成一个小双精度。(0.兰特)

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

这在我的系统上生成序列 64、80、96。每次执行此代码时,它都会这样做。你用你的特定数字(这里是 42)给生成器播种一次,然后一次又一次地调用生成器以产生一个随机数。


随机数生成器(真正不可预测的随机

性)无法设定种子并产生真正不可预测的随机。计算机通常无法做到这一点,因为随机性正是它们做的事情。计算机是确定性的,不能产生真正的随机性。你需要做一些像测量放射性衰变这样的事情来产生真正的随机性。

随机数生成器表面上看起来是随机的,但它们不是。他们从一个数字开始,然后对该数字应用确定性数学运算以更改它并产生不同的数字。每次调用生成器时,它都会根据其最后一个号码生成一个新号码。因此,PRNG的顺序总是相同的。良好的 PRNG 以这样的方式应用操作,即序列看起来非常随机分布。通常,它们会以类似于一天中的时间来播种,因此如果您不明确播种它们,它们将显示为随机。但是,如果您使用特定值播种它们,它们将产生固定的预定数字序列。