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