首页 > 代码库 > 生成订单号

生成订单号


生成订单号,最大的问题是要考虑高并发的时候.在网上找的一些方案往往在这种情况下难以适用,比如,查询订单序列最大数,根据系统时间生成等.

再考虑另一种可行的方案:数据库递增序列,没错,确实能解决高并发的问题,但在集群等情况下对数据库压力比较大,而且有些数据库对递增序列没有很好的支持,同时递增序列的位数是一直增加的,也有可能会超出数据库表字段限制.


最好的方案是用java的uuid工具类生成唯一的字符串,然后再取这个字符串对象的hashcode值,因为字符串的值是唯一的,它的hashcode也是唯一的.

可参考如下代码:


 /** 生成订单号,订单号的组成: 两位年+两位月+两位日+uuid哈希号(由于hashcode返回类型是int,最大为2147483648,不超过十位,所以此订单号不超过16位) 
   * @return
   * @throws Exception 
  **/

public  String buildOrderSn() throws Exception {
		Date createDate = new  Date();
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyMMdd");
		StringBuilder out  = new StringBuilder(dateFormat.format(createDate));
		dateFormat = new SimpleDateFormat("yyyy-MM-dd");
		int uuidNum = UUID.randomUUID().toString().hashCode();
		out.append(uuidNum);
		return out.toString();
	}