我该如何在C#中生成一个包含8个随机字母和数字的字符串?
我该如何在C#中生成一个包含8个随机字母和数字的字符串?
public static string RandomGuidString(int length) => Guid.NewGuid().ToString("N").Substring(0, length);
public static string RandomGuidString(int length) => Guid.NewGuid().ToString("N").Substring(0, length < 32 ? length : 32);
private static readonly Random Random = new();
public static string GenerateRandomString(this string sourceAlphabet, int length)
{
var chars = new char[length];
// reuse local 'length' var for iteration
while (--length >= 0)
chars[length] = sourceAlphabet[Random.Next(sourceAlphabet.Length)]
return new string(chars);
}
使用方法:
"ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890".GenerateRandomString(8); // random alpha-nums
"1234567890".GenerateRandomString(5); // random numbers
public static string GenerateRandomString(int length)
{
var numArray = new byte[length];
new RNGCryptoServiceProvider().GetBytes(numArray);
return CleanUpBase64String(Convert.ToBase64String(numArray), length);
}
private static string CleanUpBase64String(string input, int maxLength)
{
input = input.Replace("-", "");
input = input.Replace("=", "");
input = input.Replace("/", "");
input = input.Replace("+", "");
input = input.Replace(" ", "");
while (input.Length < maxLength)
input = input + GenerateRandomString(maxLength);
return input.Length <= maxLength ?
input.ToUpper() : //In my case I want capital letters
input.ToUpper().Substring(0, maxLength);
}
GenerateRandomString
并从 SanitiseBase64String
中调用了 GetRandomString
。同时,你也声明了 SanitiseBase64String
并在 GenerateRandomString
中调用了 CleanUpBase64String
。 - Wai Ha Leepublic static class StringHelper
{
private static readonly Random random = new Random();
private const int randomSymbolsDefaultCount = 8;
private const string availableChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
private static int randomSymbolsIndex = 0;
public static string GetRandomSymbols()
{
return GetRandomSymbols(randomSymbolsDefaultCount);
}
public static string GetRandomSymbols(int count)
{
var index = randomSymbolsIndex;
var result = new string(
Enumerable.Repeat(availableChars, count)
.Select(s => {
index += random.Next(s.Length);
if (index >= s.Length)
index -= s.Length;
return s[index];
})
.ToArray());
randomSymbolsIndex = index;
return result;
}
}
random.Next
的结果有什么意义?这只会使代码变得复杂,而且没有任何实际作用。public static class UsernameTools
{
public static string GenerateRandomUsername(int length = 10)
{
Random random = new Random();
StringBuilder sbuilder = new StringBuilder();
for (int x = 0; x < length; ++x)
{
sbuilder.Append((char)random.Next(33, 126));
}
return sbuilder.ToString();
}
}
我不能百分之百确定,因为我没有测试这里的每个选项,但是在我测试过的选项中,这个是最快的。我用秒表计时,显示了9-10个滴答声,所以如果速度比安全性更重要,请尝试这个:
private static Random random = new Random();
public static string Random(int length)
{
var stringChars = new char[length];
for (int i = 0; i < length; i++)
{
stringChars[i] = (char)random.Next(0x30, 0x7a);
return new string(stringChars);
}
}
SRVTextToImage
,并编写以下代码来生成随机字符串。CaptchaRandomImage c1 = new CaptchaRandomImage();
string text = c1.GetRandomString(8);
大多数情况下,它用于实现验证码。但在您的情况下,它也可以工作。希望能有所帮助。