0

好的,这可能更像是一个数学问题,但由于它与编程和我的 Web 应用程序有关,我会先在这里问:

我正在尝试创建 8 个字符长的短 ID。从中提取 id 的“池”是数字、大小写字母的组合。

string charPool = "ABCDEFGOPQRSTUVWXY1234567890ZabcdefghijklmHIJKLMNnopqrstuvwxyz"

如果你有兴趣这里的方法:

private string GenerateRandomCode(int length)
{
    string charPool = "ABCDEFGOPQRSTUVWXY1234567890ZabcdefghijklmHIJKLMNnopqrstuvwxyz";
    StringBuilder rs = new StringBuilder();

    for (int i = 0; i < length; i++)
    {
        rs.Append(charPool[(int)(_random.NextDouble() * charPool.Length)]);
    }

    return rs.ToString();
}

8 个字符 id 有多少种可能的组合?如果您也可以发布方程式,将不胜感激:)

谢谢

4

1 回答 1

2

options per slot ^ number of slots = number of combinations

az 是 26,乘以 2(对于上限也是如此)是 52,加上 10 (0-9) 是 62。每个 ID 是 8 个字符长,所以结果是 62^8,这是相当大的:

218,340,105,584,896 possible unique ID's

我建议这样做:

_random.Next(charPool.Length - 1)

(并保存charPool.Length - 1在循环外的变量中),而不是:

_random.NextDouble() * charPool.Length

因为你可能会得到一个精确的1.0with .nextDouble(),这意味着你将在一个等于长度的索引处访问数组,你会得到 IndexOutOfRangeException。

于 2012-06-02T03:35:20.527 回答