Jump to content
Sign in to follow this  
jaberwacky

VIN Decoder (Vehicle Identification Number)

Recommended Posts

I hacked up a script to decode the VIN of your 1, 2, & 3 generation Protege or BK/BL Mazda 3. Information taken from here. This will most likely go into my OBDII scanner which is in the early stages of development.

#include <Array.au3>

Global $vin1 = decode_vin("JM1BC1417VO184726", "Protege", 2)

If Not @error Then
    _ArrayDisplay($vin1)
Else
    ConsoleWrite("@error: " & @error & @LF)
EndIf

Func protege(Const ByRef $vin, Const $gen, ByRef $info)
    If $gen < 1 And $gen > 3 Then Return SetError(3)

    Select
        Case $vin[6] = 1 And $vin[7] = 4
            $info[4] = "Protege Four Door"
        Case $vin[6] = 2 And $vin[7] = 2
            $info[4] = "Four Door"
        Case $vin[6] = 2 And $vin[7] = 3
            $info[4] = "Three Door Hatchback"
        Case $vin[6] = 2 And $vin[7] = 4
            $info[4] = "Five Door Hatchback"
    EndSelect

    Switch $gen
        Case 1
            Switch $vin[8]
                Case 1
                    $info[7] = "Canadian 1.6 liter SOHC 2WD"
                Case 2
                    $info[7] = "1.6 liter SOHC 2WD"
                Case 3
                    $info[7] = "Canadian 1.8 liter SOHC NA 2WD"
                Case 4
                    $info[7] = "1.8 liter SOHC NA 2WD"
                Case 5
                    $info[7] = "Canadian 1.8 liter DOHC NA 2WD"
                Case 6
                    $info[7] = "1.8 liter DOHC NA 2WD"
                Case 7
                    $info[7] = "Canadian 1.8 liter SOHC NA 4WD"
                Case 8
                    $info[7] = "1.8 liter SOHC NA 4WD"
            EndSwitch
        Case 2
            Switch $vin[8]
                Case 1
                    $info[7] = "1.5 liter"
                Case 2
                    $info[7] = "1.8 liter"
                Case 3
                    $info[7] = "1.5 liter without airbag"
                Case 4
                    $info[7] = "1.8 liter without airbag"
            EndSwitch
        Case 3
            Switch $vin[8]
                Case 1
                    $info[7] = "1.8 liter"
                Case 2
                    $info[7] = "1.6 liter"
                Case 3
                    $info[7] = "1.8 liter with side airbag"
                Case 4
                    $info[7] = "1.6 liter with side airbag"
                Case 5
                    $info[7] = "2.0 liter"
                Case 6
                    $info[7] = "2.0 liter with side airbag"
                Case 7
                    $info[7] = "MP3/MazdaSpeed"
                Case 8
                    $info[7] = "MazdaSpeed with side airbag"
            EndSwitch
    EndSwitch

    Return $info
EndFunc   ;==>protege

Func mazda3(Const ByRef $vin, ByRef $info)
    Switch $vin[5]
        Case 'K'
            Switch $vin[6]
                Case 1
                    $info[4] = "Without side and curtain airbags."
                Case 2
                    $info[4] = "With curtain airbags."
                Case 3
                    $info[4] = "With side & curtain airbags."
            EndSwitch

            Switch $vin[7]
                Case 2
                    $info[5] = "Four Door"
                Case 4
                    $info[5] = "Five Door"
            EndSwitch
        Case 'L'
            If $vin[6] = 1 Then $info[5] = "With side and curtain airbags."

            Switch $vin[7]
                Case 'S'
                    $info[5] = "Four Door"
                Case 'H'
                    $info[5] = "Five Door"
            EndSwitch
    EndSwitch

    Switch $vin[5]
        Case 'K'
            Switch $vin[8]
                Case 'F'
                    $info[7] = "2.0 liter"
                Case 'G'
                    $info[7] = "2.0 liter (PZEV)"
                Case 'L'
                    $info[7] = "MazdaSpeed"
                Case 'M'
                    $info[7] = "MazdaSpeed (LEV II)"
                Case 3
                    $info[7] = "2.3 liter"
                Case 4
                    $info[7] = "2.3 liter (PZEV)"
            EndSwitch
        Case 'L'
            Switch $vin[8]
                Case 'F'
                    $info[7] = "2.0 liter"
                Case 'G'
                    $info[7] = "2.0 liter (PZEV)"
                Case 3
                    $info[7] = "MazdaSpeed"
                Case 4
                    $info[7] = "MazdaSpeed (LEV II)"
                Case 5
                    $info[7] = "2.5 liter"
                Case 6
                    $info[7] = "2.5 liter (PZEV)"
            EndSwitch
    EndSwitch

    Return $info
EndFunc   ;==>mazda3

Func decode_vin(Const $vin, Const $model, Const $gen = '')
    If StringLen($vin) <> 17 Then Return SetError(1)

    If Not $model = "Protege" Or Not $model = "Mazda3" Then Return SetError(2)

    Local Const $a_vin = StringSplit($vin, '')

    Local $b_vin[10]

    $b_vin[0] = "Japan"

    $b_vin[1] = "Mazda"

    Switch $a_vin[3]
        Case 1
            $b_vin[2] = "Car"
        Case 2
            $b_vin[2] = "Truck/Van"
        Case 3
            $b_vin[2] = "Van"
        Case 4
            $b_vin[2] = "Truck"
    EndSwitch

    Switch $a_vin[5]
        Case 'G'
            $b_vin[3] = "90-94"
        Case 'A'
            $b_vin[3] = "95"
        Case 'B'
            $b_vin[3] = "96"
        Case 'C'
            $b_vin[3] = "97-98"
        Case 'J'
            $b_vin[3] = "99-03"
        Case 'K'
            $b_vin[3] = "04-09"
        Case 'L'
            $b_vin[3] = "10"
    EndSwitch

    Switch $a_vin[10]
        Case 'L'
            $b_vin[8] = "90"
        Case 'M'
            $b_vin[8] = "91"
        Case 'N'
            $b_vin[8] = "92"
        Case 'P'
            $b_vin[8] = "93"
        Case 'R'
            $b_vin[8] = "94"
        Case 'S'
            $b_vin[8] = "95"
        Case 'T'
            $b_vin[8] = "96"
        Case 'V'
            $b_vin[8] = "97"
        Case 'W'
            $b_vin[8] = "98"
        Case 'X'
            $b_vin[8] = "99"
        Case 'Y'
            $b_vin[8] = "00"
        Case 1
            $b_vin[8] = "01"
        Case 2
            $b_vin[8] = "02"
        Case 3
            $b_vin[8] = "03"
        Case 4
            $b_vin[8] = "04"
        Case 5
            $b_vin[8] = "05"
        Case 6
            $b_vin[8] = "06"
        Case 7
            $b_vin[8] = "07"
        Case 8
            $b_vin[8] = "08"
        Case 9
            $b_vin[8] = "09"
        Case 'A'
            $b_vin[8] = "80/10"
        Case 'B'
            $b_vin[8] = "81/11"
    EndSwitch

    Switch $a_vin[11]
        Case 0
            $b_vin[9] = "Hiroshima"
        Case 1
            $b_vin[9] = "Hofu"
    EndSwitch

    Switch $model
        Case "Protege"
            protege($a_vin, $gen, $b_vin)
        Case "Mazda3"
            mazda3($a_vin, $b_vin)
    EndSwitch

    Return $b_vin
EndFunc   ;==>decode_vin
Edited by LaCastiglione

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...