2012-06-02 37 views
0

的最大数量好吧,这可能更多的是数学问题,而是因为它涉及到编程和我的web应用程序,我会先问这里:短ID生成和组合

我试图创建短ID所8个字符长。绘制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?请将可以张贴方程以及:)

感谢

+2

每个插槽的选项^插槽数量=组合的数量。 a-z是26,次数2(对于鞋面)是52,再加上10(0-9)是62.每个ID是8个字符长,所以结果是62^8,这非常大:218,340,105,584,896个可能的唯一ID。我会建议在没有任何机制的情况下生成它们。 – SimpleVar

+0

这是功课吗? –

+0

不,它是一个真正的MVC Web应用程序即时通讯 - 为什么它很重要? – Fixer

回答

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

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

+0

为什么不使用随机?在网络应用程序中,我们将检查碰撞,这是不够的? – Fixer

+0

检查碰撞并在碰撞时重新生成?我想......但是如果你不介意这个ID是按照逻辑顺序生成的,我会建议一些其他的算法。我现在正在处理它,并会很快发布我的建议。 – SimpleVar

+0

非常感谢 - 解决问题的一部分是避免人们“猜测”下一个ID – Fixer