订单号生成
在开发当中我想大部分程序员都会做商城类的项目,其中订单号是一个相对比较重要的数据,在用户下单是不允许有重复订单生成的。
我给大家提供了一个生成订单的方法,希望对您有所帮助!!!!!!!!!!!!
订单号生成规则
订单号=当前时间+随机码+用户id(截取其中某一部分)+随机码
采用的淘宝订单号生成规则的模式
package com;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Random;
import org.junit.Test;
public class Order_no {
// private static int STR = 4;//获取随机数字的固定长度
// private String DateNow = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"));
//实时获取系统时间
private static String gettime() {
return LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"));
}
/*
* 获取固定长度随机数字
*/
private static StringBuilder getStrnumber(int STR) {
char []numberlist = {'1','2','3','4','5','6','7','8','9','0'};
int i ;
Random r = new Random();
StringBuilder number = new StringBuilder();
while(number.length()<STR) {
i = Math.abs(r.nextInt(10));
if(i>=0&&i<numberlist.length) {
number.append(numberlist[i]);
}
}
return number;
}
/*
* 订单号生成策略(系统时间+俩位随机数+用户id后两位+三位随机数+用户ID后第五位和第二位)
*/
public static StringBuilder getOrderno(String id) {
if(id.length()<4) {
id = getStrnumber(4)+id;
}
StringBuilder orderno = new StringBuilder();
return orderno.append(gettime()).append(getStrnumber(2)).append(id.substring(id.length()-2)).append(getStrnumber(3)).append(id.substring(id.length()-5,id.length()-2));
}
@Test
public void hdsgs() {
//测试订单号执行效率
int i = 0;
List<StringBuilder> list = new ArrayList<StringBuilder>();
HashSet< StringBuilder> setlist = new HashSet<StringBuilder>();
long starttime = System.currentTimeMillis();
while(i<100000) {
i++;
list.add(getOrderno("1"));
setlist.add(getOrderno("1"));
}
long endtime = System.currentTimeMillis();
System.out.println("生成订单总耗时==========="+(endtime-starttime));
/*
* 生成订单总耗时===========3927
*/
System.out.println(list.size()==setlist.size());
}
}
可以生成10万条数据订单在两秒内没有重复的订单号。
如果有问题希望大家指点一下,感谢大家!!!!!!!!!!