您正在使用IPV4(34.230.9.187)访问本站 您本次共访问本站 1 次
 用户名: 密 码: 验证码:     用QQ登录本站
首页 软件 编程 笑话 知识 公告 台风 日历 计算器 行情 简化版
文明驾车我带头,文明行路我带头,礼貌让座我带头      

【腾讯云】云产品限时秒杀,爆款1核2G云服务器,首年74元      
[公益] 节省一分零钱 献出一份爱心 温暖世间真情      
2022年 情人节 27
2022年 元宵节 28
2023年 元 旦 348
2022年 春 节 14
 
  • 本类新增
    本类热门文章
    您现在的位置:首页 >> PHP >> 内容
    在PHP中生成随机数
    内容摘要: 第一种方法用mt_rand()functionGetRandStr($length){$str='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';$len=strlen($str)-1;$randstr='';for($i=0;$i$length;$i++){$num=mt_ra......
    第一种方法用mt_rand()

    functionGetRandStr($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;

    第二种方法(最快的)

    functionmake_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;

    }

    第三种取当时时间戳

    functionget_password($length=8)

    {

    $str=substr(md5(time()),0,$length);//md5加密,time()当前时间戳

    return$str;

    }

    第四种打乱字符串

    functiongetrandstr(){

    $str='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890';

    $randStr=str_shuffle($str);//打乱字符串

    $rands=substr($randStr,0,6);//substr(string,start,length);返回字符串的一部分

    return$rands;

    }

    第五种开始创建验证码(直接用函数生成,比较方便快捷)

    $code=rand(10000,99999);

    phpmt_rand生成0~1随机小数的效果比较

    lcg_value说明

    floatlcg_value(void)

    lcg_value()返回范围为(0,1)的一个伪随机数。本函数组合了周期为2^31-85和2^31-249的两个同余发生器。本函数的周期等于这两个素数的乘积。

    返回:范围为(0,1)的伪随机数。

    <!--?php

    for($i=0;$i<5;$i++){

    echolcg_value().PHP_EOL;

    }

    ?-->

    输出:

    0.11516515851995

    0.064684551575297

    0.68275174031189

    0.55730746529099

    0.70215008878091

    两种生成0~1随机小数方法进行比较

    1.执行时间比较

    执行10万次基于mt_rand()与mt_getrandmax()算法的运行时间

    <!--?php

    /**

    *生成0~1随机小数

    [email protected]$min

    [email protected]$max

    [email protected]

    */

    functionrandFloat($min=0,$max=1){

    return$min+mt_rand()/mt_getrandmax()*($max-$min);

    }

    //获取microtime

    functionget_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("runtime%fms\r\n",($endtime-$starttime)*1000);

    ?-->

    输出:

    runtime266.893148ms

    执行10万次lcg_value()的运行时间

    <!--?php

    //获取microtime

    functionget_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("runtime%fms\r\n",($endtime-$starttime)*1000);

    ?-->

    输出:

    runtime86.178064ms

    执行时间上比较,因为lcg_value()直接是php原生方法,而mt_rand()与mt_getrandmax()需要调用两个方法,并需要进行计算,因此lcg_value()的执行时间大约快3倍。

    2.随机效果比较

    基于mt_rand()与mt_getrandmax()算法的随机效果

    <!--?php

    /**

    *生成0~1随机小数

    [email protected]$min

    [email protected]$max

    [email protected]

    */

    functionrandFloat($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);

    ?>

    版权声明:本内容来源于网络,如有侵犯您的版权,请联系站长,本站收到您的信息后将及时处理。
    上一篇:PHP实现限制域名访问的实现代码 下一篇:php+js实现的无刷新下载文件功能示例
    发布日期:2021/11/29
    手机扫二维码直达本页
    发布时间:16:32:22
    点击:46
    录入:齐天大圣
    相关文章
    Baidu
    YiJiaCMS 6.1.0.10988 Build 21.12.28(MSSQL) 闽ICP备05000814号-1
    本空间由腾讯云(轻量应用服务器)提供,百度云加速提供加速防护

    Copyright©2000-2022