Java 生成永不重复的订单号

package com.taiping.test;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;

public class Test12 {
    
    
    /**
     * 生成永不重复的订单号
     * @param startLetter  订单号开头字符串
     * @param size  订单号中随机的大写字母个数
     * @return
     */
    public static String createOrderNo(String startLetter,int size){
        
        String orderNo = null;
        
        Date nowDate = new Date();
        
        Random random = new Random();
        
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
        
        //生成两位大写字母
        String keyArr = randomLetter(size);
    
        String fourRandom = random.nextInt(9999) + "";
        
        int randLength = fourRandom.length();
        
        //四位随机数,不足四位的补0
        if(fourRandom.length()<4){//不足四位的随机数补充0
            for(int i=1; i<=4-randLength; i++){
                fourRandom = '0' + fourRandom;
            }
        }
        
        orderNo="NS"+keyArr+sdf.format(nowDate)+fourRandom;
        
        return orderNo;
    }
    
    /**
     * 生成大写字母
     * @param size
     * @return
     */
    public static String randomLetter(int size){
        String keyArr= "";
        char key = 0;
        boolean[] flag=new boolean[26];    //定义一个Boolean型数组,用来除去重复值
        for(int i=0;i<size;i++){     //通过循环为数组赋值
            Random rand=new Random();
            int index;
            do{
                index=rand.nextInt(26);    //随机生成0-25的数字并赋值给index
            }while(flag[index]);    //判断flag值是否为true,如果为true则重新为index赋值
            key=(char) (index+65);        //大写字母的ASCII值为65-90,所以给index的值加上65,使其符合大写字母的ASCII值区间
            flag[index]=true;       //让对应的flag值为true
            
            keyArr +=key;
        }
        return keyArr;
    }
    
    /**
     * 测试
     * @param args
     */
    public static void main(String[] args) {
        
        System.out.println(createOrderNo("ND",2));
        
//        NSBP202102041552086341
    }
}

 

上一篇:js javascript 模拟点击 超级链接点击 转


下一篇:Java实现当前时间加减小时(年,月,日,小时,分钟)