如何在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入门学习知识点三 PHP上传
Jul 14 PHP
PHP-Fcgi下PHP的执行时间设置方法
Aug 02 PHP
ThinkPHP利用PHPMailer实现邮件发送实现代码
Sep 26 PHP
PHP常用正则表达式集锦
Aug 17 PHP
ThinkPHP里用U方法调用js文件实例
Jun 18 PHP
腾讯CMEM的PHP扩展编译安装方法
Sep 25 PHP
php对二维数组进行相关操作(排序、转换、去空白等)
Nov 04 PHP
PHP实现搜索地理位置及计算两点地理位置间距离的实例
Jan 08 PHP
php mailer类调用远程SMTP服务器发送邮件实现方法
Mar 04 PHP
PHP微信红包生成代码分享
Oct 06 PHP
PHP十六进制颜色随机生成器功能示例
Jul 24 PHP
PHP模糊查询技术实例分析【附源码下载】
Mar 07 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源码之 ext/mysql扩展部分
2009/07/17 PHP
神盾加密解密教程(三)PHP 神盾解密工具
2014/06/08 PHP
innerHTML 和 getElementsByName 在IE下面的bug 的解决
2010/04/09 Javascript
jQuery下通过$.browser来判断浏览器.
2011/04/05 Javascript
Jquery 点击按钮显示和隐藏层的代码
2011/07/25 Javascript
使用js实现关闭js弹出层的窗口
2014/02/10 Javascript
jquery 操作两个select实现值之间的互相传递
2014/03/07 Javascript
js实现带圆角的两级导航菜单效果代码
2015/08/24 Javascript
微信公众号支付H5调用支付解析
2016/11/04 Javascript
jQuery-mobile事件监听与用法详解
2016/11/23 Javascript
JS多物体实现缓冲运动效果示例
2016/12/20 Javascript
js按条件生成随机json:randomjson实现方法
2017/04/07 Javascript
vue-cli如何快速构建vue项目
2017/04/26 Javascript
Angular入口组件(entry component)与声明式组件的区别详解
2018/04/09 Javascript
动态加载JavaScript文件的3种方式
2018/05/05 Javascript
大转盘抽奖小程序版 转盘抽奖网页版
2020/04/16 Javascript
基于 vue-skeleton-webpack-plugin 的骨架屏实战
2019/08/05 Javascript
js实现打字小游戏
2019/12/17 Javascript
[47:12]TFT vs Secret Supermajor小组赛C组 BO3 第三场 6.3
2018/06/04 DOTA
使用Python解析JSON数据的基本方法
2015/10/15 Python
Python正则表达式教程之三:贪婪/非贪婪特性
2017/03/02 Python
python使用socket创建tcp服务器和客户端
2018/04/12 Python
Python如何读取文件中图片格式
2020/01/13 Python
python在不同条件下的输入与输出
2020/02/13 Python
雅诗兰黛(Estee Lauder)英国官方网站:世界顶级化妆品牌
2016/12/29 全球购物
说一下mysql, oracle等常见数据库的分页实现方案
2012/09/29 面试题
阿里巴巴Oracle DBA笔试题答案-备份恢复类
2013/11/20 面试题
什么是Oracle的后台进程background processes?都有哪些后台进程?
2012/04/26 面试题
高级护理专业大学生求职信
2013/10/24 职场文书
旅行社各个岗位职责
2014/03/15 职场文书
小学教师师德演讲稿
2014/05/06 职场文书
班级课外活动总结
2014/07/09 职场文书
祖国在我心中演讲稿450字
2014/09/05 职场文书
2016大学生求职自荐信范文
2016/01/28 职场文书
十大最强岩石系宝可梦,怪颚龙实力最强,第七破坏力很强
2022/03/18 日漫
Nginx的gzip相关介绍
2022/05/11 Servers