PHP – 伪随机数发生器?
作者:互联网
在过去的几天里,我一直在努力寻找一种基于种子在PHP中生成随机数的好方法.就像我相信你们大多数人已经知道的那样,对于某些情况,php rand()方法太随机了,而且我真的需要一个PRNG,它允许我根据种子一遍又一遍地生成相同的序列号.
我已经尝试过使用XORShift PRNG,问题来自于不同的操作系统似乎因为PHP处理位移而产生不同的答案.
我需要某种适用于PHP的算法,它能够生成相当大的数字,因为无论如何我会在它前面放一个零并将它变成一个小的双. (0.RAND)
解决方法:
mt_srand(42);
echo mt_rand(1, 100);
echo mt_rand(1, 100);
echo mt_rand(1, 100);
这会在我的系统上产生序列64,80,96.每次执行此代码时都会这样做.您使用特定数字(此处为42)为生成器播种一次,然后再次调用生成器以生成随机数.
随机数生成器(真正不可预测的随机性)不能播种并产生真正不可预测的随机数.计算机通常无法做到这一点,因为随机性正是他们不做的事情.计算机是确定性的,不能产生真正的随机性.你需要做一些事情,比如测量放射性衰变,以产生真正的随机性.
伪随机数生成器出现在它的表面上以随机行为,但它们不是.它们以一个数字开头,然后对该数字应用确定性数学运算来改变它并产生不同的数字.每次调用生成器时,它将根据其最后一个数字生成一个新数字.因此,PRNG的顺序始终相同.良好的PRNG以这样的方式应用操作,即序列看起来非常随机分布.通常情况下,它们会播放类似于一天中的时间,因此如果您没有明确播种,它们会显得随机.如果你用特定的值为它们播种,它们将产生一个固定的预定数字序列.
标签:php,random,numbers,prng 来源: https://codeday.me/bug/20190528/1174323.html