首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 生成隨機字符串工具類:數字、字母、混合模式全覆蓋

     編輯:Java 相關知識

需求場景

驗證碼、臨時密碼、唯一標識、測試數據生成等場景常需隨機字符串。本文提供三種靈活實現:字母數字混合、純數字、可配置字符池。

核心實現

1. 字母數字混合(62 字符池)

public static String getRandomChar(int length) {
    char[] pool = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray();
    Random random = new Random();
    StringBuilder sb = new StringBuilder(length);
    for (int i = 0; i < length; i++) {
        sb.append(pool[random.nextInt(pool.length)]);
    }
    return sb.toString();
}

// 默認 10 位
public static String getRandomChar() { return getRandomChar(10); }

2. 純數字(兩種寫法)

// 寫法一:直接 nextInt(10)
public static String getRandomNumber(int length) {
    Random random = new Random();
    StringBuilder sb = new StringBuilder(length);
    for (int i = 0; i < length; i++) sb.append(random.nextInt(10));
    return sb.toString();
}

// 寫法二:字符池復用(推薦,易擴展)
public static String getRandomNumber(int length) {
    return getRandomString(length, "0123456789");
}

3. 通用版:自定義字符池

public static String getRandomString(int length, String pool) {
    if (pool == null || pool.isEmpty()) throw new IllegalArgumentException("Pool empty");
    Random random = new Random();
    StringBuilder sb = new StringBuilder(length);
    for (int i = 0; i < length; i++) {
        sb.append(pool.charAt(random.nextInt(pool.length)));
    }
    return sb.toString();
}

進階優化建議

  • 線程安全:Random 線程安全但高併發下有爭用,建議用 ThreadLocalRandom(JDK 7+)。
  • 加密強度:安全敏感場景(Token、Session ID)必須用 SecureRandom。
  • 性能:大量生成時預分配 StringBuilder、復用字符數組、考慮位運算優化。
  • 唯一性:極高併發下純隨機可能碰撞,結合時間戳、機器 ID、計數器(如 Snowflake、UUID)。

完整工具類骨架

public final class RandomStringUtils {
    private static final String ALPHANUMERIC = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    private static final String NUMERIC = "0123456789";
    private static final Random RANDOM = new Random(); // 或 ThreadLocalRandom.current()

    public static String randomAlphanumeric(int len) { return random(len, ALPHANUMERIC); }
    public static String randomNumeric(int len) { return random(len, NUMERIC); }
    public static String random(int len, String pool) { /* ... */ }
    
    // 安全版本
    public static String secureAlphanumeric(int len) { /* SecureRandom 實現 */ }
}

總結

根據業務安全等級選擇 Random/ThreadLocalRandom/SecureRandom,封裝通用字符池方法,滿足各類隨機字符串生成需求。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved