如何生成6300万奖金代码

php
2022-08-30 21:38:01

我试图想出一种“智能”和“安全”的方法,生成大约6300万个用于比赛的唯一代码。代码的长度约为 10 个字符。

有没有人做过类似的事情或意识到这个问题可能产生的任何“障碍”?我们如何将某人能够猜出代码的可能性降至最低?

这个项目将在PHP中完成,但这并不重要,更多的是逻辑在这里是一个问题。

任何反馈将不胜感激。

更新只是为了澄清它将是10个字符的不区分大小写的字母数字值。A-Z0-9


答案 1

语法

你可能会有人复制这些代码,所以这意味着这些代码应该很容易复制。正如Gamecat所指出的那样,10^10太小了。kgiannakakis有一个更好的主意,但这会导致另一个问题:“1”看起来很像“我”。“0”,“C”,“O”和“Q”也非常相似。这不是一个大问题。定义一个安全的alfabet:“0123456789ABDEFGHJKLMNPRSTUVXYZ”(省略COIQ)从注释中:根据您选择的字体,5 / S和U / V也可能在视觉上不明确;根据需要替换。这是一个 32 符号(5 位)代码。10 个字符的代码是一个 50 位的数字。这些应该是相当微不足道的生成,排序,复制,比较等。被猜测的几率约为0.63E-7

由于代码太长而无法记住,因此用户在复制它们时需要一个休息点。因此,将字符串分成两到三部分,并确保输入字段与此细分相匹配。

例如,AKG3L-45TEE = >两组,每组5个字符,即使您不记得5个字符,也更容易找到您停止阅读的点。


如何生成它们

这相当简单。您不需要特别复杂的算法来生成候选者。您可以为每个所需的代码生成10个随机数,从每个数字中获取5位(通常中间位是最好的,例如(rand()/64)模32)。使用此值 [0-31] 作为字母表中的索引。创建一个以此字符串作为主键的数据库表,并插入直到该表具有 6300 万个条目。您可能希望将“生成日期”和“兑换日期”添加到此表中。


答案 2

如果我对你的理解是正确的,你想创建6300万个10位数字的代码,这些代码的“猜测因子”很低。

有 10,000,000,000 个有效组合。其中63,000,000是价格数字。63 / 10,000 = 0.0063。因此,每个猜测都有0,63%的成功机会。听起来并不高,但是使用蛮力,数字很容易获得。

你确定63对10,000的比例足够好吗?


推荐