Sign in to follow this  
Followers 0
jaberwacky

VIN Decoder (Vehicle Identification Number)

2 posts in this topic

#1 ·  Posted (edited)

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



Thank you. With more cars involved probably SQL would be more convenient..

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  
Followers 0