如何在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 相关文章推荐
在Windows中安装Apache2和PHP4的权威指南
Oct 09 PHP
PHP文本操作类
Nov 25 PHP
php中常用编辑器推荐
Jan 02 PHP
PHP跳转页面的几种实现方法详解
Jun 08 PHP
php实现查看邮件是否已被阅读的方法
Dec 03 PHP
php根据日期判断星座的函数分享
Feb 13 PHP
PHP随机生成信用卡卡号的方法
Mar 23 PHP
php中session定期自动清理的方法
Nov 12 PHP
CakePHP框架Model关联对象用法分析
Aug 04 PHP
yii2.0整合阿里云oss的示例代码
Sep 19 PHP
PHP cookie,session的使用与用户自动登录功能实现方法分析
Jun 05 PHP
PHP 构造函数和析构函数原理与用法分析
Apr 21 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
第五节 克隆 [5]
2006/10/09 PHP
dedecms 制作模板中使用的全局标记图文教程
2007/03/11 PHP
php在线代理转向代码
2012/05/05 PHP
php 中的4种标记风格介绍
2012/05/10 PHP
php实现批量压缩图片文件大小的脚本
2014/07/04 PHP
Yii入门教程之Yii安装及hello world
2014/11/25 PHP
php使用递归计算文件夹大小
2014/12/24 PHP
PHP实现从PostgreSQL数据库检索数据分页显示及根据条件查找数据示例
2018/06/09 PHP
Laravel的Auth验证Token验证使用自定义Redis的例子
2019/09/30 PHP
JQuery 表格操作(交替显示、拖动表格行、选择行等)
2009/07/29 Javascript
jquery 淡入淡出效果的简单实现
2014/02/07 Javascript
jquery使用jxl插件导出excel示例
2014/04/14 Javascript
js实现模拟计算器退格键删除文字效果的方法
2015/05/07 Javascript
jquery中ready()函数执行的时机和window的load事件比较
2015/06/22 Javascript
js实现浏览本地文件并显示扩展名的方法
2015/08/17 Javascript
JavaScript函数的一些注意要点小结及js匿名函数
2015/11/10 Javascript
Node.js操作Firebird数据库教程
2016/03/04 Javascript
快速掌握Node.js中setTimeout和setInterval的使用方法
2016/03/21 Javascript
深入浅析JavaScript中with语句的理解
2016/05/12 Javascript
JavaScript关于提高网站性能的几点建议(一)
2016/07/24 Javascript
基于Bootstrap实现城市三级联动
2017/11/23 Javascript
JavaScript 高性能数组去重的方法
2018/09/20 Javascript
vue实现商城秒杀倒计时功能
2019/12/12 Javascript
如何解决jQuery 和其他JS库的冲突
2020/06/22 jQuery
微信小程序实现锚点跳转
2020/11/23 Javascript
Python使用htpasswd实现基本认证授权的例子
2014/06/10 Python
详解分布式任务队列Celery使用说明
2018/11/29 Python
python实现关闭第三方窗口的方法
2019/06/28 Python
PyCharm2020.1.1与Python3.7.7的安装教程图文详解
2020/08/07 Python
基于HTML5代码实现折叠菜单附源码下载
2015/11/27 HTML / CSS
canvas绘制圆角头像的实现方法
2019/01/17 HTML / CSS
学前教育学生自荐信范文
2013/12/31 职场文书
市场营销专业毕业生求职信
2014/03/26 职场文书
好人好事演讲稿
2014/09/01 职场文书
党员剖析材料范文
2014/12/18 职场文书
信息技术研修心得体会
2016/01/08 职场文书