尽管我喜欢使用 GUID 作为系统中的唯一标识符,但对于订单号等字段来说,它并不是很用户友好,客户可能必须向客户服务代表重复该字段。
有什么好的算法可以用来生成订单号,以便它是:
- Unique
- 非连续(纯粹用于光学)
- 仅数字值(因此可以通过电话轻松读取到 CSR 或键入)
-
- 可以在中间层生成,无需往返数据库。
更新(12/05/2009)
在仔细审查了发布的每个答案后,我们决定在中间层随机分配一个 9 位数字来保存在数据库中。如果发生碰撞,我们将重新生成一个新号码。
如果中间层无法检查数据库中已存在哪些“订单号”,那么它最多只能生成一个随机数。然而,如果您生成一个限制为小于 10 亿的随机数,您应该开始担心大约 10 亿的意外碰撞sqrt(1 billion)
,也就是说,在以这种方式生成了数万个条目之后,冲突的风险就很大了。如果订单号是连续的,但以一种伪装的方式,即某个大素数模 10 亿的下一个倍数,会怎么样?这会满足您的要求吗?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)