创建顺序固定大小的 base 36 id

Creating sequential fixed size base 36 ids

我想创建一个函数,它将给我固定大小的 6 个字符的字母数字 ID,要求第一个和最后一个字符必须是字母。

我希望它们按顺序生成。我认为使用 base36 是处理 [0-9A-Z] 字母表的方法,但是我不太确定如何确保它们始终为 6 个字符长,开头和结尾都有一个 alpha。

例如,如果我按顺序创建 ID 并从 0 开始,我将得到 0 作为输出,因为 0 在两个基数中是相同的。

有谁知道可以在这里提供帮助的有效算法吗?

谢谢

您可以使用将 int 转换为 base36 字符串的标准算法,通过对基数取模然后将余数除以基数来一次提取一位数字,但要为第一个和最后一个数字:

例如在 Java:

static String getId(int id)
{
    String s = "";
    for(int i = 0; i < 6; i++)
    {
        // compute the digit using modulo arithmetic using base 26
        // for first and last character and base 36 for others
        int digit;
        if((i == 0) || (i == 5))
        {
            digit = (id % 26) + 10;         
            id /= 26;
        }
        else
        {
            digit = id % 36;
            id /= 36;
        }

        // add the digit to the string:
        if(digit < 10)
            s = (char)('0' + digit) + s;
        else
            s = (char)('A' + (digit - 10)) + s;
    }
    return s;
}

一共有26*36*36*36*36*26 = 1135420416种可能,也就是说你只需要一个32位的整数就可以全部存储起来