gpt4 book ai didi

php - 在 PHP/MySQL 中生成唯一代码?

转载 作者:IT老高 更新时间:2023-10-29 00:07:45 26 4
gpt4 key购买 nike

我正在与需要生成数百万个用于杂志刮刮卡、瓶盖奖品等的字母数字代码的客户合作。它们必须足够短才能打印在帽子上,它们要确保不包括像 1 和 I、0 和 O 等模棱两可的字符,并且必须明确存储它们以供将来使用——我们可以当有人试图赎回一个时,它只有一个确定“有效性”的算法。最后,他们希望确保代码随机分布在一个大的“代码空间”内,这样人们就不能只通过字母表来猜测其他代码。

是否有任何关于生成此类代码集的合理有效算法的指针?我在信封背面刮了几条,但这个问题听起来像是给粗心的人设的陷阱。

最佳答案

如果您需要大约 1000 万个唯一 key (例如),最好的方法是选择一个呈指数级增长的 key 空间,然后开始随机生成。了解 Birthday Paradox ——这是你应该担心的主要事情。如果您想要 2^n 个唯一且安全的 key ,请确保至少有 2^(2 * n) 个可能的值。这是一个粗略的 O(n log n) 算法:

  • 使用至少 2^50 的 key 空间(换句话说,允许 2^50 个可能的唯一值),整个数据集中几乎不会发生任何冲突——任何暴力破解 key 的人都会如果他们尝试其中的 2^25 次,则获得 key 的几率是偶数。
  • 根据需要生成尽可能多的随机数
  • 在你的键上索引数据库(这是 O(n lg n) 步骤:排序)
  • 翻阅数据库并遍历整个数据集以修剪重复项(下面的伪代码)
  • 删除重复的行,就大功告成了。

伪代码:

$last = null;
while ($current = getnext()) {
if ($last == $current) {
push($toDelete, $current);
}
$last = $current;
}

关于php - 在 PHP/MySQL 中生成唯一代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/219475/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com