C# 生成代码系列并考虑以前的代码系列

C# 生成代码系列并考虑以前的代码系列,c#,unique,auto-generate,coupon,C#,Unique,Auto Generate,Coupon,我有一个唯一代码(包括数字/字母)的SQL数据库 我想为这个数据库生成大量的新代码,这也需要考虑到以前的代码,这些代码不是用任何种子或类似的方法生成的 那么,我怎样才能做到最好呢?目前的做法是,对于生成的每个代码,它循环遍历数据库中的所有代码,并确保levenshtein距离不太小。但现在数据库已经变得越来越大,这需要很长时间 谢谢你的帮助。这在ASP.NET C#应用程序中使用。如果已发布代码的总数、代码长度和可接受的Levenshtein距离足够小,则可以在内存中构建现有代码及其“Leven

我有一个唯一代码(包括数字/字母)的SQL数据库

我想为这个数据库生成大量的新代码,这也需要考虑到以前的代码,这些代码不是用任何种子或类似的方法生成的

那么,我怎样才能做到最好呢?目前的做法是,对于生成的每个代码,它循环遍历数据库中的所有代码,并确保levenshtein距离不太小。但现在数据库已经变得越来越大,这需要很长时间


谢谢你的帮助。这在ASP.NET C#应用程序中使用。

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


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

是否有创建这些代码的模式?例如,这些数字在一起并且是连续的吗?这些字母在一起吗。。。我拥有的是一个与每个代码耦合的串行id。但是代码是完全随机的,没有模式。是的,除了我想每次我需要新代码的时候我都必须这样做,而且它会继续增长吗?你的第二个解决方案确实是最好的。你对算法或库有什么建议吗?恐怕没什么特别的。用L-距离分隔代码的要求很难以简单的方式实现。可能这就是为什么最常见的方法似乎是添加一个或两个支票字符,这有助于检测和/或纠正最常见的错误类别-换位、不正确的单个字符等。信用卡和银行账号使用此类方案,您可以从那里搜索。至于代码和序列号之间的转换,通常的方法是对称密钥加密。