短Id生成和最大组合数

时间:2012-06-02 03:27:05

标签: c# combinations

好吧这可能是一个数学问题,但由于它与编程和我的网络应用程序有关,我先问这里:

我正在尝试创建长度为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有多少种可能的组合?如果你也可以发布方程式,感激不尽:)

由于

1 个答案:

答案 0 :(得分: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.0.nextDouble()的精确匹配,这意味着您将以等于长度的索引访问该数组,并且您将获得IndexOutOfRangeException。