Php - случайная строка с фиксированным регулярным выражением

В соответствии с этим:

Генерация уникальной случайной строки определенной длины и ограничений в 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 ответа

function getRandomString ($ length = 8) {$ characters = str_split ('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789');

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

Ваша измененная функция:

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 знака

Другие вопросы по тегам