最近开发一套会员系统,涉及到订单号生成,在高并发条前提下,如何生成唯一的订单号值得斟酌,我这里提供一种较为可行的方案:
public static String getOrderIdByUUId() {
Date date=new Date();
DateFormat format = new SimpleDateFormat("yyyyMMdd");
String time = format.format(date);
int hashCodeV = UUID.randomUUID().toString().hashCode();
if (hashCodeV < 0) {//有可能是负数
hashCodeV = -hashCodeV;
}
// 0 代表前面补充0
// 4 代表长度为4
// d 代表参数为正数型
return time + String.format("%011d", hashCodeV);
}
基本思路如下:
1、获取当前日期作为订单号前8位
2、获取uuid,uuid是通用唯一识别码,具有唯一性,进行hashcode转码后依旧可以保证其唯一性,用其作为订单尾号再合适不过,我们取其11位
3、拼接日期及uuid hash码,即生成了高度唯一的订单号