创建独特且可识别的数字集

时间:2014-10-15 12:40:36

标签: php algorithm random set

关于随机数生成有不同的问题,但我没有看到一个可以解决我想要解决的具体问题。

我的要求是:

  • 我需要能够生成一组5000个数字,每个数字长度为10位数
  • 此套装中的数字必须是随机的(或随机的,以免被轻易猜到)
  • 此套装中的数字必须是唯一的
  • 集合元素中无需订购
  • 我的软件需要能够识别使用此算法生成的数字。不存储集合的成员(但是可以使用种子或用于构造它们的一些参数)。
  • 这个过程必须是可重复的。将在不同时间生成5000个数字集。相同的数字CAN出现在不同的集合中,但生成它们的算法必须不易重复/可识别。 (例如,如果我有一组5000个数字,我就不能轻易确定另一组5000中的数字集合。)

有办法做到这一点吗?任何帮助或建议在哪里看将不胜感激。 (这将在PHP中实现,但我只是在寻找一种算法来实现这一点。)

2 个答案:

答案 0 :(得分:0)

执行您要求的简单方法是获取一个数字并将其映射到易于测试的程序。例如,您可能决定使数字可被100整除。因此,只需生成随机数,然后四舍五入到最接近的可被100整除的数。或者您可以生成6位数,然后使用散列算法生成另外4位数。

如果你知道规则,很容易验证数字是否合适。你会发现很少的误报。而这种模式很难被偶然发现。

但请记住。 "不容易被偶然发现,"并不是一样的,"会抵制严重的破坏它的尝试。"如果你需要安全的东西,这不是怎么回事。

答案 1 :(得分:0)

使用整数计数器并使用10位到10位加密方案对其进行加密。

计数器将从0到4999运行。要验证该号码,只需在解密后检查高位数是否为零。 (您偶然形成有效代码的可能性超过两百万。)

要定义多个集合,您可以让计数器运行更高的值或使用不同的加密密钥。