我有一个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时,才能生成正确的混合。

10-01 23:46