【发布时间】:2012-06-02 12:11:03
【问题描述】:
好吧,这可能更像是一个数学问题,但由于它与编程和我的网络应用程序有关,我会先在这里问:
我正在尝试创建 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 有多少种可能的组合?如果您也可以发布方程式,将不胜感激:)
谢谢
【问题讨论】:
-
每个插槽的选项 ^ 插槽数 = 组合数。 a-z 是 26,乘以 2(也适用于上限)是 52,加上 10 (0-9) 是 62。每个 ID 有 8 个字符长,所以结果是 62^8,这是相当大的:218,340,105,584,896 个可能的唯一 ID。我建议在没有任何随机机制的情况下生成它们。
-
不,它是我正在开发的实际 MVC Web 应用程序 - 为什么重要?
-
Random.Next() msdn.microsoft.com/en-us/library/zd1bc8e5.aspx 的整数重载会更干净。
-
我明白你的意思 - int.maxValue 应该涵盖大多数用例。猜猜这是可扩展性的问题,尽管 int.maxvalue 应该返回合理数量的可能值。
标签: c# combinations