import java.util.HashMap;
import java.util.Map;
public class IdConvertUtil {
public IdConvertUtil() {
}
/**
* @param encodedStr
* @return
*/
public static long decode(String radixs,String encodedStr) {
//将 0 开头的字符串进行替换
if (radixs.length() < 2) {
throw new IllegalArgumentException("自定义进制最少两个字符哦!");
}
int rl = radixs.length();
long result = 0;
// 创建一个映射表,将字符映射到它们在 radixs 中的位置
Map<Character, Integer> charToIndex = new HashMap<>();
for (int i = 0; i < radixs.length(); i++) {
charToIndex.put(radixs.charAt(i), i);
}
// 逐字符解析并计算原始数字
for (int i = 0; i < encodedStr.length(); i++) {
char c = encodedStr.charAt(i);
int index = charToIndex.get(c);
result = result * rl + index;
}
return result;
}
public static String encode(String radixs, long num) {
if (num < 0L) {
throw new RuntimeException("暂不支持负数!");
} else {
return encode(radixs, num, 64);
}
}
private static String encode(String radixs, long num, int maxLength) {
if (radixs.length() < 2) {
throw new RuntimeException("自定义进制最少两个字符哦!");
} else {
int rl = radixs.length();
long tmpNum = num;
char[] aa = new char[maxLength];
int i = aa.length;
do {
--i;
aa[i] = radixs.charAt((int)(tmpNum % (long)rl));
tmpNum /= (long)rl;
} while(tmpNum > 0L);
return new String(aa, i, aa.length - i);
}
}
}