我正在尝试使用5个字母/数字在PHP中创建一些随机字符串。 它工作正常,但有时我会得到一个较短的字符串。
$characterset='ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890';
$count=0;
$lenght=strlen($characterset);
$i=5; #number of characters
while($count < $i){
$num=rand(1,$lenght);
$letter=substr($characterset, $num, 1);
$string.=$letter;
$count++;
}
strlen($ string)有时为4(检查100条记录,85条为4个字符)
答案 0 :(得分:3)
字符串字符,如数组,从零开始计数。运行你的代码很多次:除了有时候没有足够的字符,请注意你从未在那里得到A?
$num = rand(0,$lenght-1);
会这样做。
作为替代方法,您可以这样做:
$max_b36 = str_repeat("Z",$number_of_characters);
$max_dec = base_convert($max_b36,36,10);
$rand_dec = rand(0,$max_dec);
$rand_b36 = base_convert($rand_dex,10,36);
$result = sprintf("%0".$number_of_characters."s",$rand_b36);
此方法使用(可能)大数字,因此它只支持5个字符(在32位系统上)或12个字符(在64位系统上)。
答案 1 :(得分:1)
我个人用这一行奇迹替换你的整个逻辑:
print $characters = substr(
str_shuffle('ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'),
0,5)
);
(稍微关闭格式化,因此它适合放置在屏幕上)
答案 2 :(得分:0)
感谢大家的帮助,请使用以下代码:
$characters='ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890';
$string = '';
$random_string_length = 5;
$max = strlen($characters) - 1;
for ($i = 0; $i < $random_string_length; $i++) {
$string .= $characters[mt_rand(0, $max)];
}
是否可以避免使用相同的字符串?我生成了5万条记录,其中48条记录相同。