php随机数各种知识汇集

在网站功能建设中,php随机数是常用的一个功能,
比如用户注册时随机产生的验证码、
又比如用户注册时生成随机的一组密码后可自行修改,
当用户需要重置密码的时候也需要生成一个随机的密码······
随机数就根据特定的规则(或在一个数组范围内)所自动产生的字符串,
在php开发中应用广泛,不过php中的随机数也分好几种不同的情况,
首先来认识一下PHP提供的随机数函数rand()。

rand(min,max)

可选参数min和max可以使rand() 返回0到RAND_MAX之间的伪随机整数。
例如,想要5到15(包括 5 和 15)之间的随机数,用 rand(5, 15)。
常用是随机数函数,自记便于使用

/** fengkui.net
 * \[rand_number 获取一定范围内的随机数字\]
 * @param  integer $min \[最小值\]
 * @param  integer $max \[最大值\]
 * @return \[type\]       \[description\]
 */
function rand_number ($min=1, $max=9999) 
{
    return sprintf("%0".strlen($max)."d", mt_rand($min,$max));
}
/** fengkui.net
 * \[get_rand_number 生成不重复的随机数\]
 * @param  integer $start  \[需要生成的数字开始范围\]
 * @param  integer $end    \[结束范围\]
 * @param  integer $length \[需要生成的随机数个数\]
 * @return \[type\]          \[生成的随机数\]
 */
function get_rand_number($start=1,$end=10,$length=4)
{
    $connt=0;
    $temp=array();
    while($connt<$length){
        $temp\[\]=mt_rand($start,$end);
        $data=array_unique($temp);
        $connt=count($data);
    }
    sort($data);
    return $data;
}
/** fengkui.net
 * \[build_count_rand 生成一定数量的随机数,并且不重复\]
 * @param  \[type\]  $number \[数量\]
 * @param  integer $length \[长度\]
 * @param  integer $mode   \[字串类型 0 字母 1 数字 其它 混合\]
 * @return \[type\]          \[description\]
 */
function build_count_rand ($number,$length=4,$mode=1) 
{
    if($mode==1 && $length<strlen($number) ) {
        //不足以生成一定数量的不重复数字
        return false;
    }
    $rand   =  array();
    for($i=0; $i<$number; $i++) {
        $rand\[\] = rand_string($length,$mode);
    }
    $unqiue = array_unique($rand);
    if(count($unqiue)==count($rand)) {
        return $rand;
    }
    $count   = count($rand)-count($unqiue);
    for($i=0; $i<$count*3; $i++) {
        $rand\[\] = rand_string($length,$mode);
    }
    $rand = array_slice(array_unique ($rand),0,$number);
    return $rand;
}
/** fengkui.net
 * \[get_rand_str 获取随机字符串\]
 * @param  integer $randLength    \[长度\]
 * @param  integer $addtime       \[是否加入当前时间戳\]
 * @param  integer $includenumber \[是否包含数字\]
 * @return \[type\]                 \[description\]
 */
function get_rand_str($randLength=6,$addtime=1,$includenumber=0)
{
    if ($includenumber){
        $chars='abcdefghijklmnopqrstuvwxyzABCDEFGHJKLMNPQEST123456789';
    }else {
        $chars='abcdefghijklmnopqrstuvwxyz';
    }
    $len=strlen($chars);
    $randStr='';
    for ($i=0;$i<$randLength;$i++){
        $randStr.=$chars\[rand(0,$len-1)\];
    }
    $tokenvalue=$randStr;
    if ($addtime){
        $tokenvalue=$randStr.time();
    }
    return $tokenvalue;
}
/**
 * \[genToken 生成32位随机数\]
 * @param  integer $len \[长度\]
 * @param  boolean $md5 \[是否md5\]
 * @return \[type\]       \[description\]
 */
function genToken( $len = 32, $md5 = true ) {
    # Seed random number generator
    # Only needed for PHP versions prior to 4.2
    mt_srand( (double)microtime()*1000000 );
    # Array of characters, adjust as desired
    $chars = array( 'Q', '@', '8', 'y', '%', '^', '5', 'Z', '(', 'G', '_', 'O', '`', 'S', '-', 'N', '<', 'D', '{', '}', '\[', '\]', 'h', ';', 'W', '.', '/', '|', ':', '1', 'E', 'L', '4', '&', '6', '7', '#', '9', 'a', 'A', 'b', 'B', '~', 'C', 'd', '>', 'e', '2', 'f', 'P', 'g', ')', '?', 'H', 'i', 'X', 'U', 'J', 'k', 'r', 'l', '3', 't', 'M', 'n', '=', 'o', '+', 'p', 'F', 'q', '!', 'K', 'R', 's', 'c', 'm', 'T', 'v', 'j', 'u', 'V', 'w', ',', 'x', 'I', '$', 'Y', 'z', '*');
    # Array indice friendly number of chars;
    $numChars = count($chars) - 1; $token = '';
    # Create random token at the specified length
    for ( $i=0; $i<$len; $i++ ){
        $token .= $chars\[ mt_rand(0, $numChars) \];
        # Should token be run through md5?
    }
    if ( $md5 ) {
        # Number of 32 char chunks
        $chunks = ceil( strlen($token) / 32 ); $md5token = '';
        # Run each chunk through md5
        for ( $i=1; $i<=$chunks; $i++ ){
            $md5token .= md5( substr($token, $i * 32 - 32, 32) );
        }
        # Trim the token
        $token = substr($md5token, 0, $len);
    } 
    return $token;
}

冯奎博客

冯奎博客
请先登录后发表评论
  • latest comments
  • 总共0条评论