public static void Main()
Console.WriteLine(D3CustomerCheckDigit("052885069481400"));
Console.WriteLine(D3CustomerCheckDigit("052709013207201"));
Console.WriteLine(D3CustomerCheckDigit("056590673306002"));
Console.WriteLine(D3CustomerCheckDigit("057545501500103"));
private static int D3CustomerCheckDigit(string idWithoutCheckdigit) {
const string validChars = "0123456789ABCDEFGHIJKLMNOPQRSTUVYWXZ_";
idWithoutCheckdigit = idWithoutCheckdigit.Trim().ToUpper();
for (int i = 0; i < idWithoutCheckdigit.Length; i++) {
char ch = idWithoutCheckdigit[idWithoutCheckdigit.Length - i - 1];
if (validChars.IndexOf(ch) == -1)
throw new Exception(ch + " is an invalid character");
int digit = (int)ch - 48;
weight = (2 * digit) - (int) (digit / 5) * 9;
sum = Math.Abs(sum) + 10;
return (10 - (sum % 10)) % 10;