PHP中的随机字符串不够字符

时间:2017-07-05 13:11:00

标签: php

我正在尝试使用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个字符)

3 个答案:

答案 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条记录相同。