我有一个PHP函数,可以生成具有给定长度的字母数字字符串。该功能工作正常。但是,生成的字符串有时包含数字,有时不包含数字。我希望字符串每次都必须由数字和字母组成。需要建议。这是该函数的代码:
public static function GenerateAlphaNumString($length=0) {
$characterPool = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characterPool[rand(0, strlen($characterPool) - 1)];
}
return $randomString;
}
最佳答案
您可以这样做:
// Add a quick exit:
if ($length <= 0) return '';
// Produce all characters except the last one:
for ($i = 0; $i < $length-1; $i++) {
$randomString .= $characterPool[rand(0, strlen($characterPool) - 1)];
}
// Check if string contains a digit, if not, reduce range
// for generating last character so it can only be a digit:
$lastRange = preg_match("/\d/", $randomString) ? strlen($characterPool) : 10;
// choose random position, and insert last character in there:
$randomString = substr_replace($randomString, $characterPool[rand(0, $lastRange-1)],
rand(0, $length-1), 0);
return $randomString;
此方法将使每个角色出现的可能性尽可能地接近原始角色。也不会强制将数字分组在一起。
显然,只有当给定长度至少为2时,才能生成正确的混合。