【问题标题】:Generating code series and taking previous ones into account生成代码系列并考虑以前的系列
【发布时间】:2014-05-06 21:40:37
【问题描述】:

我有一个唯一代码的 SQL 数据库(由数字/字母组成)。

我想为这个数据库生成大量的新代码,这还需要考虑以前没有用任何种子或类似方式生成的代码。

那么,我将如何以最好的方式做到这一点?当前完成的方式是,对于生成的每个代码,它都会遍历数据库中的所有代码,并确保 levenshtein 距离不小。但是现在数据库已经变大了,这需要很长时间。

任何帮助表示赞赏。这在 ASP.NET C# 应用程序中使用。

【问题讨论】:

  • 是否有创建这些代码的模式?例如,这些数字是否在一起并且是连续的?字母是连在一起的吗? ...
  • 我拥有的是一个与每个代码耦合的序列号。但是代码是完全随机的,没有模式。

标签: c# unique auto-generate coupon


【解决方案1】:

如果发布代码的总数、代码的长度和可接受的 Levenshtein 距离足够小,您可以在内存中构建现有代码及其“Levenshtein 邻居”的树,以减少生成新代码的时间O(ln N)。如果代码太多,您可以尝试创建一个仅包含代码和邻居的附加 SQL 表,并依靠 SQL 进行 O(ln N) 搜索。插入新代码时,将其相邻代码一起插入。

如果您有灵活性,即您可以将代码长度增加 1 或在可接受的字符集中添加一个新字符,或者如果某个位置有未使用的字符,最好的解决方案是将“旧”分开和“新”代码空间并通过算法生成新代码空间以满足您的要求。当他们决定不在其中使用计算机的 MAC 地址时,对 UUID/GUID 采用了这种方法。

【讨论】:

  • 是的,但我想我每次需要新代码时都必须这样做,而且它会不断增长?您的第二个解决方案确实是最好的。你对算法或库有什么建议吗?
  • 恐怕没什么特别的。以 L 距离分隔代码的要求很难以直接的方式满足。可能这就是为什么最常见的方法似乎是添加一两个检查字符,这可以帮助检测和/或纠正最常见的错误类别——换位、不正确的单个字符等。信用卡和银行帐号使用这样的方案,你可以从那里搜索。至于代码和序号之间的转换,通常的做法是对称密钥加密。
猜你喜欢
  • 2015-04-14
  • 2015-05-01
  • 1970-01-01
  • 2020-12-23
  • 2011-10-31
  • 1970-01-01
  • 1970-01-01
  • 2014-01-09
  • 2011-10-21
相关资源
最近更新 更多