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