我在PHP中有一个能够生成6个字符的字母数字字符串的代码,但它不能确保生成3个字母和3个数字。
它会生成一个字符串,例如“ps7ycn” 它在字母表之间没有3个数字。 数字应该在字母之间。
示例:a3g5h9
答案 0 :(得分:3)
这将确保您只获得交替的字母和数字:
代码:(Demo)
$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
P.S。如果要随机化第一个字符是字母还是数字,请在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;
答案 1 :(得分:2)
试试这段代码:
$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);
检查this thread。它有一些好的想法和功能。
答案 2 :(得分:0)
以下是解决此问题的一种方法:
$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
。< / p>
答案 3 :(得分:-1)
您可以使用此功能
<?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);
}
?>