# VINChecker.frink

``` // 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]] ```