首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >亚马逊是如何生成它的订单号的?

问亚马逊是如何生成它的订单号的?
EN

Stack Overflow用户
提问于 2012-08-22 04:54:49
回答 2查看 15.7K关注 0票数 7

注意:我已经读过像What is the best format for a customer number, order number?这样的老问题,但是我的问题更具体一些。

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

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

  • 预先生成整个集并随机从中挑选(几百GB的数据库)
  • 从特定的种子数开始使用字典"next_permutation“
  • 日期、用户id等参数的MD5或SHA-1散列,截断为14位数字
  • 等

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

EN

回答 2

Stack Overflow用户

发布于 2017-11-02 11:59:03

建议从反向格式的日期开始,然后从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。同样,如果您不使用连字符,您将需要评估您是否需要多达10,100或1000(等等)可能的仓库号码。我希望这能帮到你!

票数 5
EN

Stack Overflow用户

发布于 2022-06-07 22:06:32

这个问题已经解决了,为什么不使用UUID呢?见RFC 4122。这些是足够接近全球独一无二的,你可以很容易地组合许多系统,从来没有复制仅仅因为数字空间是如此庞大。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12066494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档