我想创建一个函数,它将为我提供固定大小的6个字母数字ID,并要求第一个和最后一个字符必须是alpha。
我希望它们按顺序生成。我认为使用base36将是使用[0-9A-Z]字母表的方式,但是我不太确定如何确保它们总是6个字符长并且在开头和结尾都有alpha。
,例如,如果我按顺序创建ID并从0开始,输出将为0,因为0在两个基数中都相同。
有谁知道一个有效的算法可以帮助吗?
由于
答案 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位整数来存储它们。