本篇文章给大家总结了服务器端编程语言(专业超文本预处理器的缩写)生成随机数的方法并把相关的代码做了分享,有需要的读者们参考学习下吧。
第一种方法用mt_rand()
函数GetRandStr($length){
$ str=' abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz 0123456789 ';
$ len=strlen($ str)-1;
$ randstr=
for($ I=0;一美元长度;$i ){
$num=mt_rand(0,$ len);
$randstr .=$ str[$ num];
}
返回$ randstr
}
$ number=GetRandStr(6);
回声$ number
第二种方法(最快的)
函数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中随机取$长度个数组元素键名
$keys=array_rand($chars,$ length);
$ password=
for($ I=0;一美元长度;$i)
{
//将$长度个数组元素连接成字符串
$密码.=$ chars[$ keys[$ I]];
}
返回$ password
}
第三种取当时时间戳
函数get_password( $length=8)
{
$str=substr(md5(time()),0,$ length);//md5加密,时间()当前时间戳
返回$ str
}
第四种打乱字符串
函数getrandstr(){
$ str=' abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz 1234567890 ';
$ randStr=str _ shuffle($ str);//打乱字符串
$rands=substr($randStr,0,6);//substr(字符串,起始,长度);返回字符串的一部分
返回美元兰特
}
//开始创建验证码(直接用函数生成,比较方便快捷)
$code=兰特(10000,99999);
php mt_rand生成0~1随机小数的效果比较
lcg _值说明
浮点lcg_value ( void)
lcg_value()返回范围为(0, 1) 的一个伪随机数。本函数组合了周期为2^31 - 85 和2^31 - 249 的两个同余发生器。本函数的周期等于这两个素数的乘积。
返回:范围为(0, 1) 的伪随机数。
?服务器端编程语言(专业超文本预处理器的缩写)
for($ I=0;$ i5$i ){
echo lcg_value().PHP _ EOL
}
?
输出:
0.11516515851995
0.064684551575297
0.68275174031189
0.55730746529099
0.70215008878091
两种生成0~1随机小数方法进行比较
1.执行时间比较
执行10万次基于mt _兰德()与mt_getrandmax()算法的运行时间
?服务器端编程语言(专业超文本预处理器的缩写)
/**
* 生成0~1随机小数
* @param Int $min
* @ param Intmax
* @返回浮点
*/
函数randFloat($min=0,$max=1){
return $ min mt _ rand()/mt _ getrandmax()*($ max-$ min);
}
//获取微时间
函数get_microtime(){
list($usec,$sec)=explode(' ',microtime());
return(float)$ usec(float)$ sec;
}
//记录开始时间
$ start time=get _ microtime();
//执行10万次获取随机小数
for($ I=0;10万美元;$i ){
兰德浮动();
}
//记录结束时间
$ end time=get _ microtime();
//输出运行时间
printf('运行时间%f毫秒\r\n ',($结束时间-$开始时间)* 1000);
?
输出:运行时间266.893148毫秒
执行10万次lcg_value()的运行时间
?服务器端编程语言(专业超文本预处理器的缩写)
//获取微时间
函数get_microtime(){
list($usec,$sec)=explode(' ',microtime());
return(float)$ usec(float)$ sec;
}
//记录开始时间
$ start time=get _ microtime();
//执行10万次获取随机小数
for($ I=0;10万美元;$i ){
lcg _ value();
}
//记录结束时间
$ end time=get _ microtime();
//输出运行时间
printf('运行时间%f毫秒\r\n ',($结束时间-$开始时间)* 1000);
?
输出:运行时间86.178064毫秒
执行时间上比较,因为lcg_value()直接是服务器端编程语言(专业超文本预处理器的缩写)原生方法,而mt _兰德()与mt_getrandmax()需要调用两个方法,并需要进行计算,因此lcg_value()的执行时间大约快3倍。
2.随机效果比较
基于mt _兰德()与mt_getrandmax()算法的随机效果
?服务器端编程语言(专业超文本预处理器的缩写)
/**
* 生成0~1随机小数
* @param Int $min
* @ param Intmax
* @返回浮点
*/
函数randFloat($min=0,$max=1){
返回$ min mt _ rand()/mt _ samp max()*($ max-$ min);
}
标头('内容类型:影像/png’);
$im=imagecreatetruecolor(512,512);
$ color 1=imagecolorlallocate($ im,255,255,255);
$ color 2=imagecolorlallocate($ im,0,0,0);
for($ y=0);512美元和512美元;$y)>
for($ x=0);512美元;$x)>
$ rand=rand float();
if(round($rand,2)=0.5)}
imagesetpixel($im、$x、$y、$ color 1);
}否则
imagesetpixel($im、$x、$y、$ color 2);
}
}
}
imagepng($ im);
image destroy($ im);
?
lcg_value()的随机效果
?PHP?服务器端编程语言(Professional Hypertext Preprocessor的缩写)
标头('内容类型:影像/png’);
$im=imagecreatetruecolor(512,512);
$ color 1=imagecolorlallocate($ im,255,255,255);
$ color 2=imagecolorlallocate($ im,0,0,0);
for($ y=0);512美元和512美元;$y)>
for($ x=0);512美元;$x)>
$ rand=lcg _ value();
if(round($rand,2)=0.5)}
imagesetpixel($im、$x、$y、$ color 1);
}否则
imagesetpixel($im、$x、$y、$ color 2);
}
}
}
imagepng($ im);
image destroy($ im);
?
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。