短 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 有多少种可能的组合? 如果您也可以发布方程式,我们将不胜感激:)

谢谢

短 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。