VINChecker.frink

Download or view VINChecker.frink in plain text format


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


Download or view VINChecker.frink in plain text format


This is a program written in the programming language Frink.
For more information, view the Frink Documentation or see More Sample Frink Programs.

Alan Eliasen was born 19966 days, 1 hours, 42 minutes ago.