短 ID 生成和最大组合数
本文关键字:组合 ID | 更新日期: 2023-09-27 18:36:01
好吧,这可能更像是一个数学问题,但由于它与编程和我的 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 有多少种可能的组合? 如果您也可以发布方程式,我们将不胜感激:)
谢谢
options per slot ^ number of slots = number of combinations
A-Z 是 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。