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

C# 隨機字符串生成工具類(不重複、可指定字符集)

     編輯:Java 相關知識

前言

原文標題為「Java 實例化類詳解」,但正文實為 C# 隨機字符串生成類。本文按實際內容重寫,提供三種生成策略的完整實現。

核心類 RandomOperate

public class RandomOperate {
    private int rep = 0; // 防止同毫秒內種子重複

    // 1. 純數字驗證碼
    public string GenerateCheckCodeNum(int codeCount) {
        string str = "";
        long seed = DateTime.Now.Ticks + rep++;
        Random rand = new Random((int)(seed & 0xffffffffL) | (int)(seed >> rep));
        for (int i = 0; i < codeCount; i++)
            str += (char)('0' + rand.Next(10));
        return str;
    }

    // 2. 數字字母混合
    public string GenerateCheckCode(int codeCount) {
        string str = "";
        long seed = DateTime.Now.Ticks + rep++;
        Random rand = new Random((int)(seed & 0xffffffffL) | (int)(seed >> rep));
        for (int i = 0; i < codeCount; i++) {
            int num = rand.Next();
            char ch = (num % 2 == 0) ? (char)('0' + num % 10) : (char)('A' + num % 26);
            str += ch;
        }
        return str;
    }

    // 3. 自定義字符集
    private string GetRandomCode(string allChar, int codeCount) {
        string[] chars = allChar.Split(',');
        StringBuilder sb = new StringBuilder();
        Random rand = new Random();
        int last = -1;
        for (int i = 0; i < codeCount; i++) {
            int idx;
            do { idx = rand.Next(chars.Length); } while (idx == last);
            last = idx;
            sb.Append(chars[idx]);
        }
        return sb.ToString();
    }
}

使用示例

var ro = new RandomOperate();
Console.WriteLine(ro.GenerateCheckCodeNum(6));   // 如: 839201
Console.WriteLine(ro.GenerateCheckCode(8));      // 如: A3k9B2m1
Console.WriteLine(ro.GetRandomCode("A,B,C,1,2,3", 4)); // 如: B1A2

設計亮點與改進建議

  • 種子策略:結合 Ticks 與遞增計數器,緩解高併發下種子碰撞。
  • 線程安全:Random 非線程安全,高併發建議改用 ThreadLocal 或 System.Security.Cryptography.RandomNumberGenerator。
  • 字符集擴展:可增加特殊符號、排除易混淆字符(0/O, 1/l/I)以提升驗證碼可讀性。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved