创建顺序固定大小的基数36个ID

时间:2016-11-07 20:45:36

标签: algorithm uniqueidentifier base36

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

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

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

有谁知道一个有效的算法可以帮助吗?

由于

1 个答案:

答案 0 :(得分:1)

您可以使用标准算法从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位整数来存储它们。