订单号
订单是整个电子商务的核心,整个电子商务的流程也是围绕订单展开的;本文与大家分享一下各大电子商务网站订单号的生成方式。
首先我们要先知道订单号是什么?
它是您在购物网站购物后获得的订单号,记录的是购物订单信息;在您需要与购物网站进行订单查询等操作时,需要给购物网站提供商家订单号。
大部分的几种常见下单途径如下?
订单的一些规则
订单命名规定
- 唯一性
这个大家都明白,主要保证订单号不重复。
- 安全性
订单编号不能透露你公司的真实运营信息,比如你的订单就是流水号的话,那么别人就可以从订单号推测出你公司的整体运营概括了。所以订单编码必须是除了你们公司少部分人外,其他人基本看不懂的。可以参考京东和淘宝的编码规则。
- 不能使用大规模随机码
因为大规模的随机码随机生成,因为本身就没有意义所以无所谓泄密了。但是事实上这种编码规则在实现上会有很大问题的。随机码满足第二点安全性要求,为了满足唯一性,那就得在生成随机码的时候对比历史数据是否有重复,如果你的订单数量到达了十万次,你每次生成订单编码时就得对比十万条历史数据。
这里有同学可能会问:随机码就不能在编码中使用了吗?
小规模的随机码是可以使用的,比如2~3位,这种随机码一般都是和流水号等结合使用,主要作用是为了隐藏流水号的真实数据而进行使用的。
- 防止并发
主要针对编码中有时间的设定。
- 控制位数
订单号的作用就是便于查询。一般正常使用场景应该是订单出异状或者退货的时候,用户将订单号报给客服,由客服进行查询。所以一般在10~15位为好。目前京东11位,淘宝16位。
直接进入主题,我们生成订单号有很多方案
方案一:业务号+年(年份后两位)+月+日+订单数。核心逻辑,新建一张订单表维护每天的订单新增数量,生成订单时,从表中查询到订单数,组合上面的其他几项行成新的订单号码。
方案二:新建一张全局订单表,存放一个自增的id字段,每次生成订单号时候,在全局订单表中插入一条记录,使用id作为新订单的订单号。
以上两中方案都能解决在分库分表的情况下保证订单号的唯一性,但是每次生成订单号的时候都需要去一张表中插入(更新)一条记录。在高并发下会存在性能瓶颈问题。
方案三:业务编码+时间戳+机器编号【前4位】+随机4位数+毫秒数
相关阅读
package com.jae.impl;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;@Servicepub
一个好用又好看的订单号,应该怎么设计?或者应该具备哪些规则和依据呢?看下这篇,或许你会得到不一样的好思路。1. 三个真实的案例案例1
相信大家都有这样的经历,自从有了手机淘宝之后,都没怎么去实体店逛过街了。我们通过手机看的中意的宝贝之后,会直接下单,然后等着宝贝