生成随机X长度字符串

时间:2012-09-19 11:35:41

标签: .net

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

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

还有其他更好的想法吗?

3 个答案:

答案 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;字符,然后从列表中随机选择你想要的每个字符数。