更好的随机生成 PHP

2022-08-30 19:09:03

我知道,如果你知道你在做什么,并且有权访问服务器,那么只是使用是可预测的。rand()

我有一个项目,它高度依赖于选择一个尽可能不可预测的随机数。因此,我正在寻找建议,无论是其他内置函数还是用户函数,都可以生成更好的随机数。

我用它来做一个小测试:

$i = 0;

while($i < 10000){
    $rand = rand(0, 100);

    if(!isset($array[$rand])){
        $array[$rand] = 1;
    } else {
        $array[$rand]++;
    }

    sort($array);
    $i++;
}

我发现结果是均匀分布的,并且每个数字的生成次数存在奇数模式。


答案 1

将较差的随机源相加、相乘或截断将得到较差的随机结果。有关说明,请参阅随机性和随机数简介

你对PHP rand()函数的看法是正确的。有关醒目的说明,请参阅统计分析的第二个图。(第一个数字很引人注目,但它是由斯科特·亚当斯绘制的,没有用rand()绘制)。

一种解决方案是使用真正的随机生成器,例如 random.org。另一个,如果你在Linux /BSD/等上,那就是使用/dev/random。如果随机性是关键任务,则必须使用硬件随机生成器


答案 2

random.org 有一个可以通过HTTP访问的API。

RANDOM.ORG 是一个真正的随机数服务,通过大气噪声生成随机性。


推荐