// Checks VIN numbers checksum using the procedure found at: // http://www.vehicleidentificationnumber.com/NHTSA_vehicle_identification_number_content.html class VINChecker { class var d = undef class var weights = [8,7,6,5,4,3,2,10,0,9,8,7,6,5,4,3,2] class calculateVINChecksum[vin] := { if d==undef initCharMap[] sum = 0 for pos = 0 to 16 { c = substrLen[vin, pos, 1] println["Char at " + (pos+1) + " is $c, value is " + d@c] sum = sum + d@c * weights@pos } println["Sum is $sum"] checksum = sum mod 11 if checksum == 10 checksum = "X" else checksum = "$checksum" } class initCharMap[] := { d = new dict d@"0" = 0 d@"1" = 1 d@"2" = 2 d@"3" = 3 d@"4" = 4 d@"5" = 5 d@"6" = 6 d@"7" = 7 d@"8" = 8 d@"9" = 9 d@"A" = 1 d@"B" = 2 d@"C" = 3 d@"D" = 4 d@"E" = 5 d@"F" = 6 d@"G" = 7 d@"H" = 8 d@"I" = undef d@"J" = 1 d@"K" = 2 d@"L" = 3 d@"M" = 4 d@"N" = 5 d@"O" = undef d@"P" = 7 d@"Q" = undef d@"R" = 9 d@"S" = 2 d@"T" = 3 d@"U" = 4 d@"V" = 5 d@"W" = 6 d@"X" = 7 d@"Y" = 8 d@"Z" = 9 return d } } vin = trim[input["Enter VIN: "]] checksum = VINChecker.calculateVINChecksum[vin] println["Calculated checksum is: $checksum"] println["Digit in original VIN is: " + substrLen[vin,8,1]]