2012-09-19 75 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; 
    } 
} 

正如你看到的,它基本上創建字符的列表<>,然後從列表中找到您想要的字符的每個數字隨機選取。