快速订单号生成(两秒左右10万条数据无重复)

订单号生成

在开发当中我想大部分程序员都会做商城类的项目,其中订单号是一个相对比较重要的数据,在用户下单是不允许有重复订单生成的。
我给大家提供了一个生成订单的方法,希望对您有所帮助!!!!!!!!!!!!

订单号生成规则
订单号=当前时间+随机码+用户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万条数据订单在两秒内没有重复的订单号。
如果有问题希望大家指点一下,感谢大家!!!!!!!!!!

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜空繁星vv

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值