PHP函数表示生成随机数,编写php程序产生一个随机数

PHP函数表示生成随机数,编写php程序产生一个随机数,PHP生成随机数的方法总结

本篇文章给大家总结了服务器端编程语言(专业超文本预处理器的缩写)生成随机数的方法并把相关的代码做了分享,有需要的读者们参考学习下吧。

第一种方法用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);

PHP函数表示生成随机数,编写php程序产生一个随机数