如何创建包含字母和数字的随机X长度字符串。我的快速解决方案是:
Guid.NewGuid().ToString("N").Substring(X);
还有其他更好的想法吗?
答案 0 :(得分:2)
GUID不是随机的,它们是唯一的!如果您在需要随机性的地方使用它们,那么您做错了。
随机数据生成有多种选择,但问题是:对于意味着什么?掷骰子?加密国家机密?
答案 1 :(得分:2)
如果您想要字典键的“随机”字符串,只需使用Guid
即可。它们将是独特的,并且足以用于键入词典。
警告,编码并运行一次 - 否则未经测试。性能与当前解决方案无法量化。此外,这个实现比问题评论中链接的答案更加冗长。
static void Main(string[] args)
{
Random r = new Random();
int x = r.Next(1, 1000);
char[] pool = new[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' };
char[] word = new char[x];
for (int i = 0; i < x; i++)
{
// max value is not inclusive, so no -1 from length.
int a = r.Next(pool.Length);
word[i] = pool[a];
}
Console.WriteLine(new string(word));
Console.ReadLine();
}
使用ASCII码可能有更好的方法,但是meh。
答案 2 :(得分:1)
我曾经制作了一个“随机”密码生成器,它看起来像这样。你可以随意修改它,这里可能还有一些linq表达的空间。
public static string GeneratePassWord(bool useNumbers,bool useLetters, bool useUpperAndLowerCase, bool useSpecialCharacters, int passwordLength)
{
Random randomNumber = new Random();
List<char> chars = new List<char>();
if (useNumbers) // Add numbers
{
for (int i = 0; i <= 9; i++)
{
chars.Add((char)(48 + i));
}
}
if (useLetters) // Add letters
{
for (int i = 0; i <= 25; i++) // Small letters
{
chars.Add((char)(97 + i));
}
if (useUpperAndLowerCase)
{
for (int i = 0; i <= 25; i++) // Large letters
{
chars.Add((char)(65 + i));
}
}
}
if (useSpecialCharacters) // Add specials
{
chars.Add((char)'!');
chars.Add((char)'#');
chars.Add((char)'%');
chars.Add((char)'&');
chars.Add((char)'_');
chars.Add((char)'.');
chars.Add((char)'+');
chars.Add((char)'@');
chars.Add((char)'$');
}
// Generate random password from char
if (chars.Count > 0)
{
StringBuilder newPass = new StringBuilder();
for (int i = 0; i <= passwordLength; i++)
{
newPass.Append(chars[randomNumber.Next(chars.Count)]);
}
return newPass.ToString();
}
else
{
return string.Empty;
}
}
如您所见,它基本上创建了一个List&lt;&gt;字符,然后从列表中随机选择你想要的每个字符数。