次の形式でランダムな文字列を返すメソッドが必要です。
レター番号 レター番号 レター番号
スレッドセーフにする必要がない場合:
private static readonly Random rng = new Random();
private static RandomChar(string domain)
{
int selection = rng.Next(domain.Length);
return domain[selection];
}
private static char RandomDigit()
{
return RandomChar("0123456789");
}
private static char RandomLetter()
{
return RandomChar("ABCDEFGHIJKLMNOPQRSTUVWXYZ");
}
public static char RandomStringInSpecialFormat()
{
char[] text = new char[6];
char[0] = RandomLetter();
char[1] = RandomDigit();
char[2] = RandomLetter();
char[3] = RandomDigit();
char[4] = RandomLetter();
char[5] = RandomDigit();
return new string(text);
}
(RandomStringInSpecialFormat で 3 反復ループを使用することもできますが、あまりメリットはありません。)
スレッドセーフにする必要がある場合は、同時に複数のスレッドから Random にアクセスしないようにする何らかの方法が必要になります。(私の見解では)これを行う最も簡単な方法は、MiscUtilからStaticRandomを使用することです。
必要なメソッドは 2 つだけです。
1)文字をランダムにします(ASCIIを使用して、文字にキャストするよりも数値をランダムにすることができます)
2) 乱数。
どちらも次のユーティリティ メソッドを使用できます。
private int RandomNumber(int min, int max)
{
Random random = new Random();
return random.Next(min, max);
}
電話する必要がある手紙と電話RandomNumber(65,90);
する番号の場合:RandomNumber(1,9);
連結するだけです。
これらのメソッドを呼び出して文字列を作成するよりも、これがお役に立てば幸いです。
クラスにランダムオブジェクトを配置する必要があります...それは、その方法を示すためだけでした。まだ少し作業が必要ですが、ASCII から char を操作する方法を示すのは良いスタートだと思います。
public static string RandomString(Random rand, int length)
{
char[] str = new char[length];
for (int i = 0; i < length; i++)
{
if (i % 2 == 0)
{ //letters
str[i] = (char)rand.Next(65, 90);
}
else
{
//numbers
str[i] = (char)rand.Next(48, 57);
}
}
return new string(str);
}
多分これはもっと読みやすいでしょう...
if (i % 2 == 0)
{
//letters
str[i] = (char)rand.Next('A', 'Z');
}
else
{
//numbers
str[i] = (char)rand.Next('0', '9');
}
class Program
{
static void Main(string[] args)
{
Random r = new Random();
for(int i = 0;i<25;i++)
Console.WriteLine(RandomString(r,6));
Console.Read();
}
public static string RandomString(Random rand, int length)
{
char[] str = new char[length];
for (int i = 0; i < length; i++)
str[i] = (char)rand.Next(65 - (17 * (i % 2)), 91-(33 * (i % 2)));
return new string(str);
}
}
次に、Random.NextBytes 関数を Encoding.ASCII.GetString() と一緒に使用して、文字を生成します。
または、代わりに、文字列または文字配列 (string[]) を生成し、Random.Next(0,array.Length) を使用してインデックスを取得します。
StringBuilder と Random.Next(0,9) を使用して数値を生成し、数値、文字、数値などを追加して文字列を生成します...