具有验证的唯一 CD-KEY 生成算法

标签 algorithm primary-key unique

我正在尝试创建一个独特的 CD-KEY 以放入我们产品的包装盒中,就像用户用来注册产品的标准软件包装盒中的普通 CD-KEY 一样。

但是,我们销售的不是软件,而是用于犯罪和医疗目的的 DNA 采集套件。用户将通过邮件收到带有 CD-KEY 的唾液收集套件,他们将使用该 CD-KEY 在我们的网站上创建一个帐户并获得他们的结果。测试结果将链接到 CD-KEY。这是我们必须将结果与患者联系起来的唯一方法。因此,重要的是它不会失败:)

其中一个要求是 CD-KEY 列表必须充分“分散”,这样就不可能有人输入了错误的 CD-KEY 并仍然批准用于其他工具包,从而混淆两个套件。这可能会让我们承担数千美元的责任。

比如不能是递增的数字序列如
00001
00002
00003
...
原因是如果有人收到了00002的试剂盒,不小心注册成了000003,那么他的结果就会被匹配到别人身上。所以它必须像信用卡号码一样......除非输入有效序列,否则随机命中有效数字的机会是百万分之一......

此外,我们每年向各种供应商(他们将使用我们的算法生成他们自己的 CD-KEYS)销售 50,000 多个套件,因此我们无法维护所有以前发布的 CD-KEYS 的列表以检查是否重复。该算法必须生成唯一的 CD-KEY。

我们还需要能够使用快速检查算法验证 CD-KEY 是否有效,以便我们可以在用户输入的代码无效时通知他。我认为这遗漏了许多散列或 MD5 算法。它不能是 128 位,因为谁会花时间在计算机屏幕上输入它?

到目前为止,这就是我所认为的最终 CD-KEY 结构的样子

(4 个字符的产品代码)-(4 个字符的经销商代码)-(12 个字符的唯一、可验证的 CD-KEY)

前任。 384A - GTLD - {4565 - FR54 - EDF3}


为了确保 KEYS 的唯一性,我可以将当​​前日期 (20090521) 作为源的一部分包含在内。我们不会每周生成一次以上的唯一键,因此该值的变化频率足以达到唯一初始值的目的。

我可以使用什么算法来生成唯一 key ?

最佳答案

创建字符串 <providername>000001 , <providername>000002等等或其他任何东西并用公钥加密它们,这就是用户输入的“CD-KEY”。使用私钥解密 CD-KEY 并验证在解密时您会得到一个包含有效提供商名称的有效字符串。

关于具有验证的唯一 CD-KEY 生成算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/892314/

相关文章:

math - 为给定数量的整数生成唯一值的配对函数

c++ - 指定对象属性的唯一 vector 对象

algorithm - 如何从一个联合的、离散的、概率分布函数中进行数值采样

mysql - 什么时候我们的表不需要主键?

sql - 我应该使用唯一字符串作为主键还是应该将其作为单独的自动增量 INT?

ruby-on-rails - 在 Rails 4 迁移中设置自定义主键时出现问题

php - 从关联数组的数组中获取一个属性的唯一值

string - 什么时候用KMP算法好?

algorithm - 判断文本是否有意义的字符串搜索算法

algorithm - 给定N个数组,每个数组有几种方法贡献一个元素并加到k?