package net.scapeemulator.util;
public final class Base37Utils {
public static long encodeBase37(String str) {
int len = str.length();
if (len > 12)
throw new IllegalArgumentException("String too long.");
long value = 0;
for (int pos = 0; pos < len; pos++) {
char c = str.charAt(pos);
value *= 37;
if (c >= 'A' && c <= 'Z')
value += c - 'A' + 1;
else if (c >= 'a' && c <= 'z')
value += c - 'a' + 1;
else if (c >= '0' && c <= '9')
value += c - '0' + 27;
else if (c != ' ' && c != '_')
throw new IllegalArgumentException("Illegal character in string: " + c + ".");
}
while (value != 0 && (value % 37) == 0)
value /= 37;
return value;
}
public static String decodeBase37(long value) {
char[] chars = new char[12];
int pos = 0;
while (value != 0) {
int remainder = (int) (value % 37);
value /= 37;
char c;
if (remainder >= 1 && remainder <= 26)
c = (char) ('a' + remainder - 1);
else if (remainder >= 27 && remainder <= 36)
c = (char) ('0' + remainder - 27);
else
c = '_';
chars[chars.length - pos++ - 1] = c;
}
return new String(chars, chars.length - pos, pos);
}
private Base37Utils() {
}
}