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

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

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

Благодарю.

0

Решение

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

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

0

По вопросам рекламы [email protected]