import org.apache.commons.lang3.StringUtils;
public class ID15to18Converter {
final static char[] chars;
static {
chars = new char[32];
for (int i = 0; i <= 'Z'-'A'; i++) {
chars[i] = (char) ('A' + i);
}
for (int i = 0; i <= 5; i++) {
chars[32 - i - 1] = (char) (5 - i);
}
}
static String get18ID(String id15) {
int groupNum = 3;
String suffString = "";
for (int i = 0; i < groupNum; i++) {
String curString = id15.substring(i*5, i*5 + 5);
String revCurString = StringUtils.reverse(curString);
String binString = "";
for (int j = 0; j < revCurString.length(); j++) {
char curChar = revCurString.charAt(j);
if (curChar>='A' && curChar <='Z') {
binString += "1";
}else {
binString += "0";
}
}
int curIndex = Byte.valueOf(binString,2);
suffString += chars[curIndex];
}
return id15 + suffString;
}
public static void main(String[] args) {
String ss = "7510w000000H1Hl";
System.out.println(get18ID(ss));
}
}