生成两位数不同的唯一代码

Kha*_*led 7 mysql algorithm optimization perl performance

我想生成唯一的代码编号(完全由7位数组成).代码编号随机生成并保存在MySQL表中.

我有另一个要求.所有生成的代码应至少有两位数字不同.这对于在键入用户代码时防止错误很有用.希望它可以防止在执行某些操作时引用另一个用户代码,因为它更不可能错过两个数字并匹配另一个现有用户代码.

生成算法的工作原理如下:

  1. 从MySQL表中检索所有以前的代码.
  2. 一次生成一个代码.
  3. 使用之前的所有代码减去生成的代码.
  4. 检查减法结果中的非零数字的数量.
  5. 如果> 1,则接受生成的代码并将其添加到以前的代码中.
  6. 否则,跳到2.
  7. 对于请求的代码数,请重复步骤2到6.
  8. 将生成的代码保存在DB表中.

该算法工作正常,但问题与性能有关.在请求生成大量代码(例如10,000)时,完成生成代码需要很长时间.

问题:有没有办法改善这种算法的性能?

如果重要的话,我在Ubuntu服务器上使用perl + MySQL.

ata*_*lor 10

您是否考虑过Luhn算法的变体?Luhn用于为许多应用程序(包括信用卡帐号)生成数字串的校验位.它是用于生成标识符的ISO-7812-1标准的一部分.它将捕获使用一个不正确的数字输入的任何数字,这意味着任何两个有效数字至少两位数不同.

在CPAN中查看Algorithm :: LUHN以获得perl实现.