2012-09-19 167 views
2

如何创建包含字母和数字的随机X长度字符串。我的快速解决方案是:生成随机X长度字符串

Guid.NewGuid().ToString("N").Substring(X); 

还有其他更好的点子吗?

+2

http://stackoverflow.com/questions/1344221/how-can-i-generate-random-8-character-alphanumeric-strings-in-c – Henry

回答

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码,但是咩。

2

GUID不是随机的,它们是独一无二的!如果您在需要随机性的地方使用它们,那么您正在做的事情非常错误。

随机数据生成有几种选择,但这里的问题是:是什么意思?滚动骰子?加密国家机密?

+0

在我的情况下,只是为了生成一些字典的随机密钥。 –

+0

@DotNETNinja为什么不只是增加一个数字或使用一个Guid? –

+0

@DNETNETNinja:好吧,既然你想要钥匙,那么你真的*不关心他们的价值;你只关心他们是独一无二的。不是随机的,只是唯一的。因此,GUID将是一个不错的选择,同样会增加整数。 – Jon

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; 
    } 
} 

正如你看到的,它基本上创建字符的列表<>,然后从列表中找到您想要的字符的每个数字随机选取。