21 ^ 6 = 85766121种可能性。
使用数据库并存储使用过的值是不好的。如果要伪造随机性,可以使用以下方法:
减少到19个可能的数字,并利用以下事实:p为奇质数的p ^ k阶的组始终是循环的。
以7 ^ 19阶的组为例,使用生成器互质数为7 ^ 19(我选择13 ^ 11,您可以选择不能被7整除的任何东西)。
然后进行以下工作:
$prevIoUs = 0;
function generator($prevIoUs)
{
$generator = pow(13,11);
$modulus = pow(7,19); //int might be too small
$possibleChars = "ACEFHJKMNPRTUVWXY49";
$prevIoUs = ($prevIoUs + $generator) % $modulus;
$output='';
$temp = $prevIoUs;
for($i = 0; $i < 6; $i++) {
$output += $possibleChars[$temp % 19];
$temp = $temp / 19;
}
return $output;
}