我的一个客户想为他的物品使用一个唯一的代码(长篇故事......),他问我一个解决方案。该代码将由 4 部分组成,其中第一部分是发送商品的邮政编码,第二部分是供应商注册号,第三部分是发送商品的年份,最后一部分是三除法字母数字唯一字符。
如您所见,前三个部分是静态字段,同一年同一发件人永远不会改变。所以我们可以说最后一部分是那一年的标识符部分。这部分是 3 位字母数字,表示从 000 开始,以 ZZZ 结束。
问题是我的客户出于某些合理的原因,希望这部分不是连续的。例如,这不是他想要的:
06450-05-2012-000
06450-05-2012-001
06450-05-2012-002
...
06450-05-2012-ZZY
06450-05-2012-ZZZ
最后一部分应该随机产生,如:
06450-05-2012-A17
06450-05-2012-0BF
06450-05-2012-002
...
06450-05-2012-T7W
06450-05-2012-22C
但它也应该是非重复的。因此,一旦生成了可能的 id,就应该从选择池中丢弃该可能性。
我正在寻找一种有效的方法来做到这一点。
- 如果我只记录选定的可能性并对照它们检查新创建的可能性,那么在最坏的情况下,它总是会继续产生已经选择的可能性,尤其是在接近尾声时。
- 如果我一次创建所有可能性并将它们记录在表或文件中,则每次创建项目后可能需要一段时间,因为它会查找未选择的记录。顺便说一句,26 个字母 + 10 个数字意味着 46.656 种可能的组合,并且有可能添加第 4 格,这意味着 1.679.616 种可能的组合。
有没有更有效的方法可以推荐?我将使用 C# 进行编码,使用 MS SQL 进行数据库。