我正在开发一个在 C# 和 DevExpress 中接受订单的应用程序,我需要一个生成唯一订单号的函数。订单号必须包含字母和数字,长度为 20 .. 我见过 Guid.NewGuid() 之类的东西,但我不希望它完全随机,也不希望它只是一个自动递增的数字..
任何人都可以帮忙吗?即使它是不同语言的脚本,我也迫切需要想法:)
我正在开发一个在 C# 和 DevExpress 中接受订单的应用程序,我需要一个生成唯一订单号的函数。订单号必须包含字母和数字,长度为 20 .. 我见过 Guid.NewGuid() 之类的东西,但我不希望它完全随机,也不希望它只是一个自动递增的数字..
任何人都可以帮忙吗?即使它是不同语言的脚本,我也迫切需要想法:)
您可以创建自己的类型。假设 yyyyMMddWWW-YYY-XXXXXXX 其中 WWW 是商店编号,YYY 收银员 id XXXXXXX 是十六进制数字(-> 可能是您将其转换为十六进制的实际自动增量数字)。这只是一个想法。恐怕您必须根据系统的元素来决定它会如何。
编辑:如果您可以对其应用校验位算法也将有助于避免错误
结果:链接到当前客户端 PC 的序列号 :)
就像 Oded 建议的那样,Guid 不是随机的(好吧,如果你有网卡,则不是)。它基于时间和位置坐标。有关详细说明,请参阅Raymond Chen 的博客文章。
最好对订单 ID 使用自动递增的 int。我不明白你为什么不想使用它或没有Guid?
除了自动 ID 之外,我想不出任何其他方法来保持唯一性并代表系统中不同订单的顺序。
两种不同的方法:
一个想法浮现在脑海。
将 DateTime.Now.Ticks 转换为十六进制字符串。
瞧,String.Format("{0:X}", value);
如果不够长,你说你需要 20 位数字,你总是可以用零填充。
我的两分钱。
如果您需要想法,请查看Luhn和Luhn mod N算法。
虽然这些算法不是唯一的代码生成器,但它们可能会为您提供一些关于如何生成可以验证的代码的想法(这样您就可以在将代码发送到数据库之前验证代码的正确性)。