Php - 具有固定正则表达式的随机字符串

时间:2016-03-07 23:06:43

标签: php generated-code

关于这个:

Generating a unique random string of a certain length and restrictions in PHP?

我希望它得到进化:

function getRandomString($length = 8) {
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $string = '';

    for ($i = 0; $i < $length; $i++) {
        $string .= $characters[mt_rand(0, strlen($characters) - 1)];
    }

    return $string;
}

我如何做随机8个字符,但有5个数字?

感谢。

2 个答案:

答案 0 :(得分:0)

您修改的功能:

function getRandomString( $length = 8 ) 
{
    $characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $digits     = '0123456789';
    $string     = '';

    for( $i = 0; $i < 5; $i++ )
    {
        $string .= $digits[ mt_rand( 0, strlen( $digits ) - 1 ) ];
    }

    for( $i = 5; $i < $length; $i++ ) 
    {
        $string .= $characters[ mt_rand( 0, strlen( $characters ) - 1 ) ];
    }

    $array = str_split( $string );
    shuffle( $array );
    return implode( '', $array );
}

eval.in demo

从您的功能开始,我们在$characters$characters中划分$digits,然后我们将空字符串添加5个随机数字和剩余的随机字符。

最后,我们将结果字符串随机播放并返回。

变体(不重复的字符):

function getRandomString( $length = 8 )
{
    $characters = str_split( 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' );
    $digits     = str_split( '0123456789' );

    shuffle( $characters );
    shuffle( $digits );

    $retval = array_merge
    (
        array_slice( $digits, 0, 5 ), 
        array_slice( $characters, 0, $length-5 )
    );

    shuffle( $retval );

    return implode( '', $retval );
}

我们直接从数组开始:$characters$digits,然后我们将它们混洗,我们提取5位数字项和剩余的字符项,将它们合并到$retval数组中。

最后,我们将$retval数组洗牌并将其作为字符串返回。

编辑:先例版本3位数/ 5个字符;实际版本:5位数/ 3个字符

答案 1 :(得分:0)

function getRandomString($ length = 8){     $ characters = str_split(&#39; abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789&#39;);

for ($i = 0; $i < $length; $i++) {
    $rand = '';
    foreach (array_rand($characters, 5) as $k) $rand .= $characters[$k];
    $string[$i] = $rand;
}

return $string;

}

http://ideone.com/SSg3m4