public static String CalculateChecksum(String code) {
if (code.Length < 2)
return code;
String text = code.ToUpper(System.Globalization.CultureInfo.InvariantCulture);
int sum = 0;
int len = text.Length;
for (int k = 0; k < len; ++k)
sum += CHARS.IndexOf(text[k]);
sum = (sum + 15) / 16 * 16 - sum;
return code.Substring(0, len - 1) + CHARS[sum] + code.Substring(len - 1);
}