php 随机数

方案1

<?php 
    $num = range(0,10);//利用range()函数产生一个0到10的数组
    shuffle($num);//利用shuffle()函数将产生的$num数组随机打乱顺序
    for ($i=0; $i < 5; $i++) {//选取数组前5个,即随机 
        echo $num[$i]."&nbsp";
    }
 ?>

方案2

function randomkeys1($len=8,$format='NUMBER'){
    $is_abc = $is_numer = 0;
    $password = $tmp ='';
    switch($format){
        case 'ALL':
            $chars='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
            break;
        case 'CHAR':
            $chars='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
            break;
        case 'NUMBER':
            $chars='0123456789';
            break;
        default :
            $chars='0123456789';
            break;
    }
    mt_srand((double)microtime()*1000000*getmypid());
    while(strlen($password)<$len){
        $tmp =substr($chars,(mt_rand()%strlen($chars)),1);
        if(($is_numer <> 1 && is_numeric($tmp) && $tmp > 0 )|| $format == 'CHAR'){
            $is_numer = 1;
        }
        if(($is_abc <> 1 && preg_match('/[a-zA-Z]/',$tmp)) || $format == 'NUMBER'){
            $is_abc = 1;
        }
        $password.= $tmp;
    }
    if($is_numer <> 1 || $is_abc <> 1 || empty($password) ){
        $password = randomkeys($len,$format);
    }
    return $password;
}

两种方案都可以产生随机数

方案1 在for循环的瞬间产生的随机数重复率很低,测试100个以内无重复

方案2 在for循环的瞬间产生的随机数重复率很高

 

posted @ 2017-04-11 19:07  码一个大馒头  阅读(479)  评论(0编辑  收藏  举报