Как сгенерировать случайную 6-символьную строку с чередующимися буквами и цифрами?

У меня есть код в PHP, который может генерировать 6-символьную буквенно-цифровую строку, но он не гарантирует, что генерируются 3 буквы и 3 числа.

Он генерирует строку, такую ​​как «ps7ycn». Он не имеет 3 числа между алфавитом.
Цифры должны быть между буквами.

пример: a3g5h9

0

Решение

Это гарантирует, что вы получите только чередующиеся буквы и цифры:

Код: (демонстрация)

$letters='abcdefghijklmnopqrstuvwxyz';  // selection of a-z
$string='';  // declare empty string
for($x=0; $x<3; ++$x){  // loop three times
$string.=$letters[rand(0,25)].rand(0,9);  // concatenate one letter then one number
}
echo $string;

Потенциальные выходы:

i9f6q0
j4u5p4
j6l6n9

постскриптум Если вы хотите рандомизировать, является ли первый символ буквой или цифрой, используйте эту строку кода после for петля.

if(rand(0,1)){$string=strrev($string);}

rand() будет генерировать 0 или 1Будем лечить условно 0 как false а также 1 как true, Это предлагает сценарий «броска монеты» относительно того, следует ли перевернуть строку или нет.


Если вы хотите гарантировать уникальные буквы и цифры в выводе …

$letters=range('a','z'); // ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
shuffle($letters);
$numbers=range(0,9);  // [0,1,2,3,4,5,6,7,8,9]
shuffle($numbers);
$string='';
for($x=0; $x<3; ++$x){
$string.=$letters[$x].$numbers[$x];
}
echo $string;
3

Другие решения

Попробуйте этот код:

 $str = '';
for ( $i = 1; $i <= 6; ++$i ) {
if ( $i % 2 ) {
$str .=  chr(rand(97,122));
}else{
$str .= rand(0,9);
}
}

Этот короче, но вы не можете использовать его, чтобы иметь нечетную длину, как a1g7y5k:

$str = '';
for ( $i = 1; $i <= 3; ++$i ) {
$str .=  chr(rand(97,122)) . rand(0,9);
}

-В качестве альтернативы используйте этот метод, который можно улучшить (см. Комментарии mickmackusa):

$alphas  = 'abcdefghijklmnopqrstuvwxyz';
$numbers = '0123456789';
$arr1 = str_split($alphas);
$arr2 = str_split($numbers);
$arr3 = array_rand($arr1,3);
$arr4 = array_rand($arr2,3);
$arr5 = array();
for ($i=0; $i<count($arr3); $i++) {
$arr5[] = $arr3[$i];
$arr5[] = $arr4[$i];
}
$result =    implode('',$arr5);

Проверьте эта тема.У него есть несколько хороших идей и функций.

2

Вот один способ, которым вы могли бы решить эту проблему:

$alpha  = 'abcdefghijklmnopqrstuvwxyz';
$number = '0123456789';

$random = '';

for ( $i = 0; $i < 6; ++$i ) {
if ( $i % 2 ) {
$random .= substr( $number, rand( 0, strlen( $number ) - 1 ), 1 );
} else {
$random .= substr( $alpha, rand( 0, strlen( $alpha ) - 1 ), 1 );
}
}

$random теперь будет содержать случайное значение из шести символов с первым, третьим и пятым символами из $alpha и второй, четвертый и шестой персонажи из $number,

0

Вы можете использовать эту функцию

<?php
public static function random_string($charsNo = 3, $NumbersNo = 3)
{
$character_set_array = array();
$character_set_array[] = array('count' => $charsNo, 'characters' => 'abcdefghijklmnopqrstuvwxyzasdsawwfdgrzvyuyiuhjhjoppoi');
$character_set_array[] = array('count' => $NumbersNo, 'characters' => '0123456789');
$temp_array = array();
foreach ($character_set_array as $character_set) {
for ($i = 0; $i < $character_set['count']; $i++) {
$temp_array[] = $character_set['characters'][rand(0, strlen($character_set['characters']) - 1)];
}
}
shuffle($temp_array);
return implode('', $temp_array);
}
?>
-1