У меня есть код в PHP, который может генерировать 6-символьную буквенно-цифровую строку, но он не гарантирует, что генерируются 3 буквы и 3 числа.
Он генерирует строку, такую как «ps7ycn». Он не имеет 3 числа между алфавитом.
Цифры должны быть между буквами.
пример: a3g5h9
Это гарантирует, что вы получите только чередующиеся буквы и цифры:
Код: (демонстрация)
$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;
Попробуйте этот код:
$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);
Проверьте эта тема.У него есть несколько хороших идей и функций.
Вот один способ, которым вы могли бы решить эту проблему:
$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
,
Вы можете использовать эту функцию
<?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);
}
?>