亚马逊如何生成订单号?

时间:2012-08-22 04:54:49

标签: random e-commerce amazon guid uuid

注意:我已经阅读了What is the best format for a customer number, order number?之类的旧问题,但我的问题更为具体。

生成伪随机数不久会遇到“生日问题”。例如,如果我使用27位字段作为我的订单号,则在15000个条目之后,碰撞的几率会增加到50%。

我想知道像亚马逊这样的大型电子商务企业是否以其他任何方式生成订单号 - 例如:

  • 预先生成整个集合并从中随机挑选(数百GB的数据库)
  • 从特定种子编号开始使用词典“next_permutation”
  • 日期,用户ID等参数的MD5或SHA-1哈希,截断为14位

我想要的只是一个非重复的整数(不需要非常随机,除了混淆订单的总数)一定宽度。关于如何实现这一点的任何想法?

1 个答案:

答案 0 :(得分:1)

建议从反向格式的日期开始,然后从1开始,然后是检查(或随机)数字。如果您每天可能永远不会超过100个订单,则需要添加两位数加上一个支票/随机数字。

年份需要仅包括最后两位数,可能只包括最后一位数,具体取决于您保存订单记录的时间:7年左右通常就足够了,这意味着可以删除2009年(从9开始)的记录在2018年期间,准备在2019年再次使用订单号。您可以将mmdd用于接下来的4位数字,或者只是将年份中的天数编号并仅使用3位数 - 这取决于您希望数字的人性化程度。也可以省略每月的日期,并在每月开始时重新开始连续数字,而不是每天。

今天是2017年11月2日,我们假设今天是16号订单,您的订单号是71102168(其中8是校验位或随机数字)。如果你可能有,但不超过一千,你需要一个额外的数字,因此:711020168。为避免限制自己的位数,你可能更喜欢使用连字符:71102-168 ...你如果你愿意,可以在支票/随机数字之前加入另一个连字符:71102-16-8。

如果您有多个区域处理订单,您可能希望包括一个仓库编号,可能在开头或日期之后,允许您使用每个仓库的序列号 - 例如仓库5可能是:5-71102 -168,71102-5-168或711025168.同样,如果您不使用连字符,则需要评估是否需要最多十个,一百个或一千个(等)可能的仓库编号。我希望这有帮助!