本篇文章给大家总结了服务器端编程语言(专业超文本预处理器的缩写)生成随机数的方法并把相关的代码做了分享,有需要的读者们参考学习下吧。
第一种方法用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毫秒rn ,($结束时间-$开始时间)* 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毫秒rn ,($结束时间-$开始时间)* 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);
?