c#随机字符串与字母和数字x的长度
本文关键字:数字 随机 字符串 | 更新日期: 2023-09-27 18:05:39
我希望生成一个随机字符串,必须在以下格式:
[LETTER][NUMBER][LETTER][NUMBER]等指定长度
到目前为止,我有一个随机字符串生成器,删除了一些我不想要的字符,任何关于如何实现这样一个字符串的建议将非常感激。
public static string GenerateRandomString(int length)
{
const string chars = "ABCEFGHJKPQRSTXYZ23456789";
return new string(Enumerable.Repeat(chars, length)
.Select(s =>s[RandomHelper.StaticRandom.Instance.Next(s.Length)])
.ToArray());
}
使用for
循环似乎会更容易:
public static string GenerateRandomReference(int length)
{
const string chars = "ABCEFGHJKPQRSTXYZ";
const string ints = "23456789";
var returnString = new StringBuilder(length);
for (int currentIndex = 0; currentIndex < length; currentIndex++)
{
if (currentIndex % 2 == 0)
//Random letter
returnString.Append(chars[RandomHelper.StaticRandom.Instance.Next(chars.Length)]);
else
//Random number
returnString.Append(ints[RandomHelper.StaticRandom.Instance.Next(ints.Length)]);
}
return returnString.ToString();
}
使用counter mod 2可以得到交替的行为。A while也可以,但是for
语义在这里更有意义。
通过保留可用字符的限制,您可以执行以下操作:
我发现单独生成数字或字母更清楚,因此您可以根据自己的喜好组合它们。
对于生成本身,可以使用简单的while循环或for循环。
private static char GenerateRandomLetter()
{
const string chars = "ABCEFGHJKPQRSTXYZ";
Random rnd = new Random(); // you can avoid this allocation, put it class member
return chars[rnd.Next(0, chars.Length - 1)];
}
private static int GenerateRandomNumber()
{
Random rnd = new Random(); // you can avoid this allocation, put it class member
return rnd.Next(2, 9);
}
private static string GenerateKey(int length)
{
// use a StringBuilder if you have a lot of concatenations
var sb = new StringBuilder();
bool doLetter = true;
for(int i = 0; i < length; ++i)
{
sb .Append((doLetter ? GenerateRandomLetter().ToString() : GenerateRandomNumber().ToString()));
doLetter = !doLetter;
}
return sb.ToString();
}