如何在PHP中生成随机数


Posted in PHP onJune 04, 2020

第一种方法用mt_rand()

function GetRandStr($length){
$str='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
$len=strlen($str)-1;
$randstr='';
for($i=0;$i<$length;$i++){
$num=mt_rand(0,$len);
$randstr .= $str[$num];
}
return $randstr;
}
$number=GetRandStr(6);
echo $number;

第二种方法(最快的)

function make_password( $length = 8 )
{
 // 密码字符集,可任意添加你需要的字符
 $chars = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 
 'i', 'j', 'k', 'l','m', 'n', 'o', 'p', 'q', 'r', 's', 
 't', 'u', 'v', 'w', 'x', 'y','z', 'A', 'B', 'C', 'D', 
 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L','M', 'N', 'O', 
 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y','Z', 
 '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '!', 
 '@','#', '$', '%', '^', '&', '*', '(', ')', '-', '_', 
 '[', ']', '{', '}', '<', '>', '~', '`', '+', '=', ',', 
 '.', ';', ':', '/', '?', '|');
 // 在 $chars 中随机取 $length 个数组元素键名
 $keys = array_rand($chars, $length); 
 $password = '';
 for($i = 0; $i < $length; $i++)
 {
 // 将 $length 个数组元素连接成字符串
 $password .= $chars[$keys[$i]];
 }
 return $password;
}

第三种取当时时间戳

function get_password( $length = 8 ) 
{
 $str = substr(md5(time()), 0, $length);//md5加密,time()当前时间戳
 return $str;
}

第四种打乱字符串

function getrandstr(){
$str='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890';
$randStr = str_shuffle($str);//打乱字符串
$rands= substr($randStr,0,6);//substr(string,start,length);返回字符串的一部分
return $rands;
}

第五种开始创建验证码(直接用函数生成,比较方便快捷)

$code = rand(10000, 99999);

php mt_rand生成0~1随机小数的效果比较

lcg_value说明

float lcg_value ( void )
lcg_value() 返回范围为 (0, 1) 的一个伪随机数。本函数组合了周期为 2^31 - 85 和 2^31 - 249 的两个同余发生器。本函数的周期等于这两个素数的乘积。

返回:范围为 (0, 1) 的伪随机数。

<?php
for($i=0; $i<5; $i++){
 echo lcg_value().PHP_EOL;
}
?>

输出:

0.11516515851995
0.064684551575297
0.68275174031189
0.55730746529099
0.70215008878091

两种生成0~1随机小数方法进行比较

1.执行时间比较

执行10万次基于mt_rand()mt_getrandmax()算法的运行时间

<?php
/**
 * 生成0~1随机小数
 * @param Int $min
 * @param Int $max
 * @return Float
 */
function randFloat($min=0, $max=1){
 return $min + mt_rand()/mt_getrandmax() * ($max-$min);
}
 
// 获取microtime
function get_microtime(){
 list($usec, $sec) = explode(' ', microtime());
 return (float)$usec + (float)$sec;
}
 
// 记录开始时间
$starttime = get_microtime();
 
// 执行10万次获取随机小数
for($i=0; $i<100000; $i++){
 randFloat();
}
 
// 记录结束时间
$endtime = get_microtime();
 
// 输出运行时间
printf("run time %f ms\r\n", ($endtime-$starttime)*1000);
?>

输出:

run time 266.893148 ms

执行10万次lcg_value()的运行时间

<?php
// 获取microtime
function get_microtime(){
 list($usec, $sec) = explode(' ', microtime());
 return (float)$usec + (float)$sec;
}
 
 
// 记录开始时间
$starttime = get_microtime();
 
 
// 执行10万次获取随机小数
for($i=0; $i<100000; $i++){
 lcg_value();
}
 
 
// 记录结束时间
$endtime = get_microtime();
 
 
// 输出运行时间
printf("run time %f ms\r\n", ($endtime-$starttime)*1000);
?>

输出:

run time 86.178064 ms

执行时间上比较,因为lcg_value()直接是php原生方法,而mt_rand()mt_getrandmax()需要调用两个方法,并需要进行计算,因此lcg_value()的执行时间大约快3倍。

2.随机效果比较

基于mt_rand()mt_getrandmax()算法的随机效果

<?php
/**
 * 生成0~1随机小数
 * @param Int $min
 * @param Int $max
 * @return Float
 */
function randFloat($min=0, $max=1){
 return $min + mt_rand()/mt_getrandmax() * ($max-$min);
}
 
 
header('content-type: image/png');
$im = imagecreatetruecolor(512, 512);
$color1 = imagecolorallocate($im, 255, 255, 255);
$color2 = imagecolorallocate($im, 0, 0, 0);
for($y=0; $y<512; $y++){
 for($x=0; $x<512; $x++){
 $rand = randFloat();
 if(round($rand,2)>=0.5){
  imagesetpixel($im, $x, $y, $color1);
 }else{
  imagesetpixel($im, $x, $y, $color2);
 }
 }
}
imagepng($im);
imagedestroy($im);
?>

lcg_value()的随机效果

<?php
header('content-type: image/png');
$im = imagecreatetruecolor(512, 512);
$color1 = imagecolorallocate($im, 255, 255, 255);
$color2 = imagecolorallocate($im, 0, 0, 0);
for($y=0; $y<512; $y++){
 for($x=0; $x<512; $x++){
 $rand = lcg_value();
 if(round($rand,2)>=0.5){
  imagesetpixel($im, $x, $y, $color1);
 }else{
  imagesetpixel($im, $x, $y, $color2);
 }
 }
}
imagepng($im);
imagedestroy($im);
?>

3.随机阅读推荐

+ php给源码加密的方法总结:https://3water.com/article/134506.html

以上就是如何在PHP中生成随机数的详细内容,更多关于PHP随机数的资料请关注三水点靠木其它相关文章!

PHP 相关文章推荐
通俗易懂的php防注入代码
Apr 07 PHP
php 在windows下配置虚拟目录的方法介绍
Jun 26 PHP
php Calender(日历)代码分享
Jan 03 PHP
php操作XML、读取数据和写入数据的实现代码
Aug 15 PHP
PHP实现动态柱状图改进版
Mar 30 PHP
php数组合并与拆分实例分析
Jun 12 PHP
nginx+thinkphp下解决不支持pathinfo模式
Jul 01 PHP
PHP Curl模拟登录微信公众平台、新浪微博实例代码
Jan 28 PHP
php  PATH_SEPARATOR判断当前服务器系统类型实例
Oct 28 PHP
Zend Framework常用校验器详解
Dec 09 PHP
浅谈Yii乐观锁的使用及原理
Jul 25 PHP
PHP实现可添加水印与生成缩略图的图片处理工具类
Jan 16 PHP
PHP 扩展Memcached命令用法实例总结
Jun 04 #PHP
PHP正则表达式函数preg_replace用法实例分析
Jun 04 #PHP
PHP常用字符串函数用法实例总结
Jun 04 #PHP
TP3.2框架分页相关实现方法分析
Jun 03 #PHP
PHP Trait功能与用法实例分析
Jun 03 #PHP
PHP时间相关常用函数用法示例
Jun 03 #PHP
ThinkPHP5框架中使用JWT的方法示例
Jun 03 #PHP
You might like
PHP判断远程图片或文件是否存在的实现代码
2014/02/20 PHP
利用Fix Rss Feeds插件修复WordPress的Feed显示错误
2015/12/19 PHP
JavaScript中的细节分析
2012/06/30 Javascript
JS 弹出层 定位至屏幕居中示例
2014/05/21 Javascript
JavaScript中的定时器之Item23的合理使用
2015/10/30 Javascript
整理Javascript数组学习笔记
2015/11/29 Javascript
jQuery使用$.ajax提交表单完整实例
2015/12/11 Javascript
基于JavaScript实现带缩略图的轮播效果
2017/01/12 Javascript
JavaScript比较同一天的时间大小实例代码
2018/02/09 Javascript
快速解决vue在ios端下点击响应延时的问题
2018/08/27 Javascript
bootstrap table列和表头对不齐的解决方法
2019/07/19 Javascript
pageGroup.js实现分页功能
2019/07/27 Javascript
javascript实现前端成语点击验证优化
2020/06/24 Javascript
python实现矩阵乘法的方法
2015/06/28 Python
Python实现的矩阵类实例
2017/08/22 Python
深入理解Django中内置的用户认证
2017/10/06 Python
python中numpy的矩阵、多维数组的用法
2018/02/05 Python
利用Django-environ如何区分不同环境
2018/08/26 Python
使用python判断jpeg图片的完整性实例
2019/06/10 Python
解决Python中报错TypeError: must be str, not bytes问题
2020/04/07 Python
Django实现微信小程序支付的示例代码
2020/09/03 Python
汉森冲浪板:Hansen Surfboards
2018/05/19 全球购物
美国农场鲜花速递:The Bouqs
2018/07/13 全球购物
三星加拿大官方网上商店:Samsung CA
2020/12/18 全球购物
名词解释型面试题(主要是网络)
2013/12/27 面试题
办公文员的工作岗位职责
2013/11/12 职场文书
酒店总经理助理职责
2014/02/12 职场文书
2014年安全生产大检查方案
2014/05/13 职场文书
企业文化标语口号
2014/06/09 职场文书
机械制造专业大学生自我鉴定
2014/09/19 职场文书
病人写给医生的感谢信
2015/01/23 职场文书
2015年学校保卫部工作总结
2015/05/11 职场文书
在Django中使用MQTT的方法
2021/05/10 Python
修改MySQL的数据库引擎为INNODB的方法
2021/05/26 MySQL
python 开心网和豆瓣日记爬取的小爬虫
2021/05/29 Python
Spring实现内置监听器
2021/07/09 Java/Android