Java生成隨機數 兩種方式簡單 時間戳 方式和字母數字組合方式


//包名別忘了

import org.apache.commons.lang.StringUtils;

import java.math.BigInteger;
import java.util.Random;

/**

  • util - zh生成工具
    */
    public final class AcounntUtil {

    private static final long EPOCH = 1479533469598L; //開始時間,固定一個小於當前時間的毫秒數
    private static final int max12bit = 4095;
    private static final long max41bit= 1099511627775L;
    private static String machineId = "" ; // 機器ID

    /**
    *

    • 根據時間戳創建
    • @return

    */
    public static String create(){

    long time = System.currentTimeMillis() - EPOCH  + max41bit;
    // 二進制的 毫秒級時間戳
    String base = Long.toBinaryString(time);
    
    // 序列數
    String randomStr = StringUtils.leftPad(Integer.toBinaryString(new Random().nextInt(max12bit)),12,'0');
    if(StringUtils.isNotEmpty(machineId)){
        machineId = StringUtils.leftPad(machineId, 10, '0');
    }
    
    //拼接
    String appendStr = base + machineId + randomStr;
    // 轉化為十進制 返回
    BigInteger bi = new BigInteger(appendStr, 2);
    
    return  Long.valueOf(bi.toString())+"";
    

    }

    //生成隨機用戶名,數字和字母組成,
    public static String getStringRandom(int length) {
    String val = "";
    Random random = new Random();
    //參數length,表示生成幾位隨機數
    for(int i = 0; i < length; i++) {
    String charOrNum = random.nextInt(2) % 2 == 0 ? "char" : "num";
    //輸出字母還是數字
    if( "char".equalsIgnoreCase(charOrNum) ) {
    //輸出是大寫字母還是小寫字母
    int temp = random.nextInt(2) % 2 == 0 ? 65 : 97;
    val += (char)(random.nextInt(26) + temp);
    } else if( "num".equalsIgnoreCase(charOrNum) ) {
    val += String.valueOf(random.nextInt(10));
    }
    }
    return val;
    }
    }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM