0

我正在开发一个在 C# 和 DevExpress 中接受订单的应用程序,我需要一个生成唯一订单号的函数。订单号必须包含字母和数字,长度为 20 .. 我见过 Guid.NewGuid() 之类的东西,但我不希望它完全随机,也不希望它只是一个自动递增的数字..

任何人都可以帮忙吗?即使它是不同语言的脚本,我也迫切需要想法:)

4

6 回答 6

1

您可以创建自己的类型。假设 yyyyMMddWWW-YYY-XXXXXXX 其中 WWW 是商店编号,YYY 收银员 id XXXXXXX 是十六进制数字(-> 可能是您将其转换为十六进制的实际自动增量数字)。这只是一个想法。恐怕您必须根据系统的元素来决定它会如何。

编辑:如果您可以对其应用校验位算法也将有助于避免错误

于 2012-05-29T10:50:48.867 回答
0
  1. 获取主板ID
  2. 获取硬盘ID
  3. 以任何方式合并它
  4. 添加您的密码
  5. 应用 MD5
  6. 应用 Base54

结果:链接到当前客户端 PC 的序列号 :)

于 2012-05-29T11:37:18.120 回答
0

就像 Oded 建议的那样,Guid 不是随机的(好吧,如果你有网卡,则不是)。它基于时间和位置坐标。有关详细说明,请参阅Raymond Chen 的博客文章
最好对订单 ID 使用自动递增的 int。我不明白你为什么不想使用它或没有Guid?

除了自动 ID 之外,我想不出任何其他方法来保持唯一性并代表系统中不同订单的顺序。

于 2012-05-29T10:49:26.150 回答
0

两种不同的方法:

  • 创建当前时间的 MD5 或 SHA1 哈希
  • 增量编号的哈希
于 2012-05-29T10:38:44.350 回答
0

一个想法浮现在脑海。
将 DateTime.Now.Ticks 转换为十六进制字符串。
瞧,String.Format("{0:X}", value);
如果不够长,你说你需要 20 位数字,你总是可以用零填充。

于 2012-05-29T10:51:33.030 回答
0

我的两分钱。

如果您需要想法,请查看LuhnLuhn mod N算法。

虽然这些算法不是唯一的代码生成器,但它们可能会为您提供一些关于如何生成可以验证的代码的想法(这样您就可以在将代码发送到数据库之前验证代码的正确性)。

于 2012-05-29T12:59:03.827 回答