600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > php 的伪随机数与真随机数实例详解

php 的伪随机数与真随机数实例详解

时间:2019-10-10 10:32:54

相关推荐

php 的伪随机数与真随机数实例详解

后端开发|php教程

随机数,php,实例

后端开发-php教程首先需要声明的是,计算机不会产生绝对随机的随机数,计算机只能产生“伪随机数”。其实绝对随机的随机数只是一种理想的随机数,即使计算机怎样发展,它也不会产生一串绝对随机的随机数。计算机只能生成相对的随机数,即伪随机数。

iis 源码,vscode查看文件大小插件,ubuntu异常重启,找不见tomcat网页,爬虫灯对比,php跳转语句,葫芦岛seo优化排名公司,水墨flash网站源码lzw

伪随机数并不是假随机数,这里的“伪”是有规律的意思,就是计算机产生的伪随机数既是随机的又是有规律的。怎样理解呢?产生的伪随机数有时遵守一定的规律,有时不遵守任何规律;伪随机数有一部分遵守一定的规律;另一部分不遵守任何规律。比如“世上没有两片形状完全相同的树叶”,这正是点到了事物的特性,即随机性,但是每种树的叶子都有近似的形状,这正是事物的共性,即规律性。从这个角度讲,你大概就会接受这样的事实了:计算机只能产生伪随机数而不能产生绝对随机的随机数。

圣诞祝福网页源码,vscode怎么使用命令行,ubuntu Vga投影,tomcat支持分布式,网络爬虫 实现,网页php文件下载,关键词霸屏方案seo公司lzw

首先来了解一下真随机数和伪随机数的概念。

easyui 源码解析,ubuntu多个窗口切换,爬虫图形用户界面,php抓取php函数,筑巢seo成都lzw

真随机数发生器:英文为:true random number generators ,简称为:TRNGs,是利用不可预知的物理方式来产生的随机数。

伪随机数发生器:英文为:pseudo-random number generators ,简称为:PRNGs,是计算机利用一定的算法来产生的。

对比一下两种办法产生的随机数的图片。

(利用大气噪音来生成随机数,而大气噪音是空气中的雷暴所产生的 )生成的随机位图:

Windows下PHP的rand()函数产生的随机图片:

很显然,后者伪随机数发生器产生的图片有这明显的条纹。

利用php的rand随机函数产生这张图片的代码为:

//需要开启gd库header("Content-type: image/png");$im = imagecreatetruecolor(512, 512)or die("Cannot Initialize new GD image stream");$white = imagecolorallocate($im, 255, 255, 255);for ($y=0; $y<512; $y++) {for ($x=0; $x<512; $x++) {if (rand(0,1) === 1) {imagesetpixel($im, $x, $y, $white);}}}imagepng($im);imagedestroy($im);

实际上也并不是所有的伪随机数发生器(PRNGs)效果都这么差的,只是恰好在Windows下的PHP的rand()函数是这样。如果是在Linux下 测试相同的代码的话,所产生的图片也看不出明显的条纹。在Windows下如果用mt_rand()函数替代rand()函数的话效果也会好很多。这是由 于mt_rand()用了Mersenne Twister(马其塞旋转)算法来产生随机数。PHP的文档还说:mt_rand() 可以产生随机数值的平均速度比 libc 提供的 rand() 快四倍。

以下是使用PHP时比用mt_rand()函数产生更好的伪随机数的一段例子代码:

代码如下:

GetRandom(16,0);// if we ask for binary data PHP munges it, so we// request base64 return value. We squeeze out the// redundancy and useless ==CRLF by hashing...if ($pr_bits) { $pr_bits = md5($pr_bits,TRUE); }} catch (Exception $ex) {// echo Exception: . $ex->getMessage();}}if (strlen($pr_bits)

所以PHP要产生真随机数 还是要调用外部元素来支持的!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。