生成随机字符串PHP

时间:2012-01-24 05:50:36

标签: php

为了生成随机字符串,我编写了这样的代码但是如果用负值,零或100万调用函数,则会产生很多问题。所以请建议我更好的代码。

/*
* The following function is for generating a random string value.
* @param unknown_type $length
* @return string $randString
*/
function generateRandomString( $length ) {
    $randString = "";
    srand();
    $characters = "abcdefghijklmnopqrstuvwxyz1234567890";
    /*
    *   build string of random characters
    */ 
    while( strlen( $randString ) < $length ) {
        $randString .= substr( $characters, rand() % (strlen( $characters )),1 );
    }
return $randString;
}

4 个答案:

答案 0 :(得分:1)

要停止作为参数传递的负数或零作为问题,您可以使用max(1, $length)。或者,检查< 1并抛出异常或返回FALSE

  

所以请建议我更好的代码。

以下是您的代码的一些建议......

function generateRandomString( $length ) {
    $chars = array_merge(range('a', 'z'), range(0, 9));
    shuffle($chars);
    return implode(array_slice($chars, 0, $length));
}

CodePad

请注意,在结果字符串中,它不会有两次相同的字符。

如果您愿意,可以使用......

function generateRandomString( $length ) {
    $chars = array_merge(range('a', 'z'), range(0, 9));

    return array_reduce(array_rand($chars, $length), function($str, $key) use ($chars) { 
        return $str.= $chars[$key];
    }, ''); 

}

CodePad

......或略有不同......

function generateRandomString( $length ) {
    $chars = array_merge(range('a', 'z'), range(0, 9));

    return implode(array_map(function($key) use ($chars) { 
        return $chars[$key];
    }, array_rand($chars, $length)));   

}

CodePad

答案 1 :(得分:0)

如果您唯一关心的是设置长度限制,那么您可以设置自己的长度,如果您的最小值是5,并且$ length是&lt; 5你只需将它设置为5,如果你的最大值是30你可以将它设置为30如果它是&gt; 30 ...看?

这是为了什么?生成一个总长度为32个字符的随机数字串的更好方法是从当前时间戳中获取md5。当然,如果两个用户同时调用代码,但是如果没有关于你正在做什么的额外信息,我不会保证这是独一无二的。我会考虑这种方法。

答案 2 :(得分:0)

您可以检查长度的正确值。如果指定的长度不是实际值,则应重置它。

function generateRandomString($length) 
{
    if($length < 1 || $length > 50)
    {
        $length = 25;    
    }

    // do the rest here...
}

答案 3 :(得分:0)

    /*
    * The following function is for generating a random string value.
    * @param unknown_type $length
    * @return string $randString
    */
    function generateRandomString( $length ) {
        $valueCheck = 99999999;            
        $length = ($length<0)?-$length:$length;
        $length = ($length==0)?rand(0,$valueCheck):$length;
        $length = ($length>$valueCheck)?rand(0,$valueCheck):$length;
        $randString = "";
        srand();
        $characters = "abcdefghijklmnopqrstuvwxyz1234567890";
        /*
        *   build string of random characters
        */ 
        while( strlen( $randString ) < $length ) {
            $randString .= substr( $characters, rand() % (strlen( $characters )),1 );
        }
    return $randString;
    }