最近有朋友打电话问我应该如何来产生订单号,好多朋友在这里比较困扰并且也看到很多帖子在问如何来产生订单号,我想跟大家交流一下订单号的产生规则。
大家常用的几种方式:
1.利用数据库种子表产生一个自增长的订单号
2.日期+自增长数字的订单号
3.产生随机的订单号
这几种订单号的方式个人觉得都可以,都有一些自己的优缺点
第一种和第二种方式:简单、很容易知道自己订单的数量,但确定也同样的明显你的竞争对手也很容易知道你每天的订单数量
第三种方式:每次都要到你的订单表去查一下是否产生的订单号已经使用过,性能损耗严重
个人认为订单号是一个保证唯一的在系统内部交换的号码,我在产生订单号的时候遵从“三不原则”:
不要在订单号上体现订单的相关信息(比如订单时间)
不要让你的竞争对手通过订单号得到你每天的订单量
不要为了得到订单号消耗太多的性能
我在这里使用了种子表和Sin函数,先通过种子表产生一个顺序的ID,通过Sin函数来保证唯一性,再通过颠倒顺序来扰乱竞争对手,经过了实际测试订单在14亿之内是不会有重复的如果超过了14亿可以通过增位来解决问题。
数据库代码如下,希望得到大家的指正。