繁体   English   中英

使用字母和数字生成序列号

[英]Generate serial number using letters and digits

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

有人可以帮忙吗? 即使它是另一种语言的脚本,我也急切需要想法:)

您可以创建自己的类型。 假设yyyyMMddWWW-YYY-XXXXXXX,其中WWW是商店编号,YYY收银员ID XXXXXXX是十六进制数字(->也许是您将其变为十六进制的实际自动递增数字)。 这只是一个想法。 恐怕您必须根据系统的要素来决定它的状态。

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

两种不同的方法:

  • 创建当前时间的MD5或SHA1哈希
  • 增量编号的哈希

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

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

我想到一个想法。
将DateTime.Now.Ticks转换为十六进制字符串。
瞧, String.Format("{0:X}", value);
如果不够长,您说您需要20位数字,则始终可以填充零。

  1. 获取主板ID
  2. 获取硬盘ID
  3. 以任何方式合并
  4. 添加您的密码
  5. 应用MD5
  6. 应用Base54

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

我的两分钱。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM