Random.org,我们提供来自大自然的随机数

有规律可寻的随机数

在php中生成随机数,有rand()和mt_rand(),mt_rand() 比rand() 快四倍,一般使用mt_rand()生成随机数。

但是只要是通过这些函数获得随机数,那么背后其实都是有一套固定公式,一旦通过公式算出来的随机数,不能算作真正的随机数,或者称之为:

伪随机

伪随机就不能作为真正的公平,或者说:

所谓的随机,其实有规律可循的!

有规律就不能叫做随机,这就发生了悖论。

 

请看下面的图片:

 

这两张分辨率为 512*512 的图是大量随机数生成的点阵图。

右边的是PHP 的 rand() 函数生成的点阵图,明显看到有规律可循的。

 

虽然我们经常使用mt_rand(),但是mt_rand()查到如下资料:

该函数用了 Mersenne Twister(马其塞旋转) 中已知的特性作为随机数发生器,它可以产生随机数值的平均速度比 libc 提供的 rand() 快四倍。

这里只说到了速度变快了,所以推测,就算用mt_rand()生成的点阵图也是有规律的,因为背后都是固定的算法。

 

真正的随机

那么这么世界有哪些是真正的随机呢?答案是:

大自然

左边的图是一家专门从事真随机生成的公司,他们使用硬件搜集大气噪声,通过噪声产生随机二进制位来产生随机数,很明显,通过大气噪音生成的颗粒度很均匀,几乎看不出来有任何的规律,这才是真正做到了

真随机

 

 

 

Random.org提供了接口,可以利用其来写一个真随机的函数。

 

// 声明取一个区间内随机数的函数
function getRandom($min = 1, $max = 10)
{
 $params = [
 'min' => $min, // 最小数
 'max' => $max, // 最大数
 'num' => 1, // 只取1个随机数
 'format' => 'plain', // 返回格式
 'col' => 1, // 整数列 填 1 即可
 'base' => 10 // 进制数 一般取十进制
 ];
 $params_str = http_build_query($params);

 // 调用 Random.org 的接口
 $ch = curl_init();
 $url = 'https://www.random.org/integers/?'.$params_str;
 curl_setopt($ch, CURLOPT_URL, $url);
 curl_setopt($ch, CURLOPT_HEADER, 0);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
 $random_info = curl_exec($ch);
 curl_close($ch);

 return trim($random_info);
}

 

点阵图来源于这个网站:

http://boallen.com/random-numbers.html



版权声明:如果要转载我的文章,请标明出处,谢谢了。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

打赏

发表评论

电子邮件地址不会被公开。 必填项已用*标注