如何在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+xslt在windows平台上
Oct 09 PHP
php面向对象全攻略 (十二) 抽象方法和抽象类
Sep 30 PHP
检测png图片是否完整的php代码
Sep 06 PHP
php中0,null,empty,空,false,字符串关系的详细介绍
Jun 20 PHP
php ci框架中加载css和js文件失败的解决方法
Mar 03 PHP
PHP获取一段文本显示点阵宽度和高度的方法
Mar 12 PHP
给PHP开发者的编程指南 第一部分降低复杂程度
Jan 18 PHP
PHP 接入支付宝即时到账功能
Sep 18 PHP
php类的自动加载操作实例详解
Sep 28 PHP
PHP云打印类完整示例
Oct 15 PHP
PHP实现的文件上传类与用法详解
Jul 05 PHP
laravel 5.3 单用户登录简单实现方法
Oct 14 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
我的论坛源代码(五)
2006/10/09 PHP
PHP和XSS跨站攻击的防范
2007/04/17 PHP
PHP数组操作汇总 php数组的使用技巧
2011/07/17 PHP
typecho插件编写教程(二):写一个新插件
2015/05/28 PHP
PHP回调函数与匿名函数实例详解
2017/08/16 PHP
PHP架构及原理知识点详解
2019/12/22 PHP
jquery nth-child()选择器的简单应用
2010/07/10 Javascript
jquery滚动条插件jScrollPane的使用介绍
2013/11/08 Javascript
jquery中ajax函数执行顺序问题之如何设置同步
2014/02/28 Javascript
js 获取时间间隔实现代码
2014/05/12 Javascript
js实现多选项切换导航菜单的方法
2015/02/06 Javascript
javascript中DOM复选框选择用法实例
2015/05/14 Javascript
javascript实现动态导入js与css等静态资源文件的方法
2015/07/25 Javascript
JavaScript中的toString()和toLocaleString()方法的区别
2017/02/15 Javascript
Angular实现下载安装包的功能代码分享
2017/09/05 Javascript
vue 利用路由守卫判断是否登录的方法
2018/09/29 Javascript
详解vue的数据劫持以及操作数组的坑
2019/04/18 Javascript
微信小程序图表插件wx-charts用法实例详解
2019/05/20 Javascript
用 js 写一个 js 解释器过程详解
2019/08/02 Javascript
微信小程序实现写入读取缓存详解
2019/08/30 Javascript
python代码制作configure文件示例
2014/07/28 Python
python3实现基于用户的协同过滤
2018/05/31 Python
python实现批量图片格式转换
2020/06/16 Python
PyQt5 QTableView设置某一列不可编辑的方法
2019/06/25 Python
python调试神器PySnooper的使用
2019/07/03 Python
使用TensorFlow搭建一个全连接神经网络教程
2020/02/06 Python
美国顶尖折扣时尚购物网:Bluefly
2016/08/28 全球购物
法国综合购物网站:RueDuCommerce
2016/09/12 全球购物
工程招投标邀请书
2014/01/30 职场文书
课前三分钟演讲稿
2014/04/24 职场文书
关于热爱祖国的演讲稿
2014/05/04 职场文书
单位工作证明格式模板
2014/10/04 职场文书
弘扬焦裕禄精神践行三严三实心得体会
2014/10/13 职场文书
四风问题专项整治工作情况报告
2014/10/28 职场文书
离婚协议书格式
2015/01/26 职场文书
python中数组和列表的简单实例
2022/03/25 Python