生成唯一的6位代码
我正在从以下字符生成6位代码。这些将用于在贴纸上盖章。
它们将以10k或更少的批量生成(在打印之前),我不认为总数会超过1-2百万(可能要少得多)。
生成一批代码后,将检查现有代码的MySQL数据库,以确保没有重复项。
// exclude problem chars: B8G6I1l0OQDS5Z2$characters = 'ACEFHJKMNPRTUVWXY4937';
$string = '';
for ($i = 0; $i < 6; $i++) {
$string .= $characters[rand(0, strlen($characters) - 1)];
}
return $string;
- 这是生成代码的可靠方法吗?
- 会有多少可能的排列?(来自21个字符的库中的6位数字代码)。对不起数学不是我的强项
回答:
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;
}
它将循环遍历所有可能的值,并且看起来有些随机,除非它们开始挖掘。一个更安全的选择是乘法组,但我已经忘记了数学:(
以上是 生成唯一的6位代码 的全部内容, 来源链接: utcz.com/qa/415906.html