Vehicle Identification Number

Numer VIN samochodu Porsche

VIN (ang. Vehicle Identification Number) – numer identyfikacyjny pojazdu nadany i umieszczony przez producenta[1]. Przed 1981 nie było zaakceptowanego standardu określającego ten numer i producenci stosowali dla niego różne formaty. Współczesny numer VIN składa się z 17 znaków – cyfr i liter z wyłączeniem liter I, O oraz Q.

Numer VIN można znaleźć w dowodzie rejestracyjnym pojazdu, w rubryce oznaczonej literą E oraz na karoserii poniżej szyby po stronie kierowcy. Numer identyfikacyjny pojazdu w dowodzie rejestracyjnym powinien być taki sam, jak numer znajdujący się na poszczególnych elementach samochodu.[2] Według Rozporządzenia Unii Europejskiej numer VIN umieszcza się po prawej stronie pojazdu [3]

Historia numeru VIN

Numer VIN został wprowadzony w życie po raz pierwszy w 1954 r., w USA. Przez początkowe lata funkcjonowania, aż do 1981 r., nie istniał ujednolicony format zapisywania numerów VIN a różni producenci pojazdów stosowali odmienne formy zapisu informacji. Taki stan rzeczy nie sprawdzał się w obliczu rosnącej liczby pojazdów, w związku z czym postanowiono go uregulować i dostosować nadawanie VIN do globalnych norm ISO. Po jej wprowadzeniu producenci, którzy produkowali pojazdy na rynek USA, bardzo szybko dostosowali się do tego standardu. Agencja normalizacyjna ISO wprowadziła zalecenia używania standardu VIN oraz jego struktury i w Europie sam numer nadwozia funkcjonował, jednak zestawy informacji w nim zawarte były wprowadzane stopniowo.

Przykładowo Volkswagen zaczął kodować większą liczbę informacji w latach 1995-1997, a cyfrę kontrolną w latach 2009-2015 dla wybranych modeli z grupy. Liczba kontrolna w numerach VIN jest również stosowana, chodź nie we wszystkich marko-modelach - w pojazdach europejskich występuje ona np. w Audi A1.[4]

Format zapisu VIN

Są dwa sposoby zapisu numeru identyfikacyjnego pojazdu. W Unii Europejskiej jest stosowana norma ISO-3779, wprowadzona w życie w 1981 r., dotyczy zawartości i struktury numeru VIN, natomiast w Ameryce Północnej jest stosowany format bardziej surowy (zawierający cyfrę kontrolną), ale kompatybilny z europejskim. Poprzednie normy ISO dotyczące numeru VIN to ISO 4030 dotyczące umiejscowienia i umocowania numeru VIN oraz ISO 3780, dotyczące globalnego ujednolicenia pierwszej sekcji numeru VIN, czyli WMI.[5]

Numer VIN składa się z następujących sekcji:

StandardWVWZZZ6RZHU095472
ISO 3779WMIVDSVIS
Ameryka PółnocnaIdentyfikacja producentaAtrybuty typuCyfra kontrolnaRok produkcjiKod zakładuNumer egzemplarza

Światowa identyfikacja producenta

WMI (World Manufacturer Identifier) – to pierwsze trzy pozycje numeru VIN, za pomocą których koduje się region i nazwę producenta pojazdu.

Polskim producentom kod WMI nadaje Łukasiewicz-PIMOT[6]

Regiony WMI
Pierwszy symbol WMI określa region, w którym znajduje się producent. W praktyce każdy jest przypisany krajowi producenta. Zaznaczono najpopularniejsze kraje produkcji.
WMIRegionUwagi
A-HAfrykaAA-AH = RPA
J-RAzjaJ = Japonia
KL-KR = Korea Płd.
L = Chiny
MA-ME = Indie
MF-MK = Indonezja
ML-MR = Tajlandia
PA-PE = Filipiny
PL-PR = Malezja
S-ZEuropaSA-SM = Zjednoczone Królestwo
SN-ST, W = Niemcy
SU-SZ = Polska
TA-TH = Szwajcaria
TJ-TP = Czechy
TR-TV = Węgry
VA-VE = Austria
VF-VR = Francja
VS-VW = Hiszpania
VX-V2 = Jugosławia
XS-XW = ZSRR
X3-X0 = Rosja
YA-YE = Belgia
YF-YK = Finlandia
YS-YW = Szwecja
ZA-ZR = Włochy
1-5Ameryka Północna1, 4, 5 = Stany Zjednoczone
2 = Kanada
3 = Meksyk
6-7Oceania6A-6W = Australia
7A-7E = Nowa Zelandia
8-0Ameryka Południowa8A-8E = Argentyna
8X-82 = Wenezuela
9A-9E, 93-99 = Brazylia
9F-9J = Kolumbia
Lista WMI niektórych producentów
Kolejne 2 symbole określają producenta. Najczęściej jest to kod, który SAE przydzieliło oficjalnie krajom i producentom. Tablica może jednak zawierać także symbole nietypowe.
WMIProducent
JAIsuzu
JDADaihatsu
JFFuji Heavy Industries (Subaru)
JHHonda
JKKawasaki (motocykle)
JMMazda i Mitsubishi
JNNissan
JSSuzuki
JTToyota
JYYamaha (motocykle)
KLDaewoo
KMHHyundai (prod. koreańska)
KNKia
LC0BYD Auto
MALHyundai (prod. indyjska)
NLHHyundai (prod. turecka)
SALLand Rover
SAJJaguar
SARMG ROVER
SCCLotus Cars
SUAAutosan
SUDWielton
SUEBOSMAL
SUFFSM/Fiat Auto Poland
SUJJelcz
SULFSC Lublin
SUPFSO
SURFabryka Samochodów Rolniczych „Polmo” w Poznaniu
SUSFabryka Samochodów Ciężarowych "Star"
SUUSolaris
SUZZasław
SW9Solbus
SX9SOMMER
SZ9Epoka
SZHBWW
SZRBORO
TMAHyundai (prod. czeska)
TMBŠkoda Auto
TRAIkarus
TRUAudi
U5YHyundai (prod. słowacka)
VF1Renault
VF3Peugeot
VF7Citroën
VSSSEAT
WAUAudi
WBABMW
WBSBMW M
WDBMercedes-Benz
WMAMAN AG
WMWMINI
WP0Porsche
W0LOpel
WVWVolkswagen
WV1Volkswagen Commercial Vehicles
WV2Volkswagen Bus/Van
YK1Saab
YS3Saab
YV1Volvo Cars
ZARAlfa Romeo
ZDFFerrari Dino
ZFAFiat
ZFFFerrari
1FBFord Motor Company
1FCFord Motor Company
1FDFord Motor Company
1FMFord Motor Company
1FUFreightliner
1FVFreightliner
1F9FWD Corp.
1GGeneral Motors
1GCChevrolet
1GMPontiac
1HHonda USA
1LLincoln
1M?Mercury
1M1Mack Truck
1M2Mack Truck
1M3Mack Truck
1M4Mack Truck
1NNissan USA
1VWVolkswagen USA
1YVMazda USA
2FBFord Motor Company Kanada
2FCFord Motor Company Kanada
2FMFord Motor Company Kanada
2FTFord Motor Company Kanada
2FUFreightliner
2FVFreightliner
2MMercury
2GGeneral Motors Kanada
2G1Chevrolet Kanada
2G1Pontiac Kanada
2HMHyundai Kanada
2WKWestern Star
2WLWestern Star
2WMWestern Star
3FEFord Motor Company Meksyk
3GGeneral Motors Meksyk
3VWVolkswagen Meksyk
9BWVolkswagen Brazylia
4FMazda USA
4MMercury
4SSubaru-Isuzu Automotive
4USBMW USA
VTYamaha (motocykle)
4V1Volvo
4V2Volvo
4V3Volvo
4V4Volvo
4V5Volvo
4V6Volvo
4VLVolvo
4VMVolvo
4VZVolvo
5LLincoln
5YJTESLA
6FFord Motor Company Australia
6G1General Motors-Holden po Nov 2002
6H8General Motors-Holden przed Nov 2002
6MMMitsubishi Motors Australia
6T1Toyota Australia

Sekcja określająca typ

VDS (Vehicle Descriptor Section) to znaki na pozycjach od 4 do 9. Określają one typ pojazdu. Są używane zgodnie z lokalnymi regulacjami prawnymi do identyfikacji typu pojazdu i mogą zawierać informacje o konstrukcji i rodzaju nadwozia. Każdy producent ma własny system wykorzystywania tego pola.

Cyfra kontrolna (Ameryka Północna)
Element znajdujący się na 9 pozycji pełni rolę cyfry kontrolnej VIN pojazdów z Ameryki Północnej. Od dnia 6 lipca 2022 r., weszło w życie rozporządzenie wykonawcze Komisji (UE) 2021/535 z dnia 31 marca 2021 r. Zasada uchylająca rozporządzenie UE nr. 19/2011 ustala m.in. nowe parametry techniczne tabliczki znamionowej producenta oraz numeru identyfikacyjnego pojazdu (VIN).[7]

Numer własny egzemplarza

VIS (Vehicle Identifier Section) to znaki na pozycjach od 10 do 17. Są one wykorzystywane do nadania unikatowego numeru konkretnego egzemplarza pojazdu. VIS jest wykorzystywany przez producenta w przypadku reklamacji. Zawiera informacje o zainstalowanych opcjach wykonania, silniku, rodzaju napędu; często jest jednak po prostu numerem porządkowym nadawanym automatycznie kolejnym wychodzącym z produkcji pojazdom. Ostatnie cztery znaki stanowią zawsze cyfry.

Rok produkcji w Ameryce Północnej
znak na pozycji 10 jest w Ameryce Północnej wykorzystywany do kodowania roku produkcji.
Kod zakładu producenta
znak na pozycji 11 jest w Ameryce Północnej wykorzystywany do kodowania zakładu producenta. Każdy producent ma własny system oznaczeń, jednak jego położenie w kodzie VIN jest ustalone.

Kod roku modelowego

Jest to kod, który zależnie od zwyczajów producenta określa rok produkcji pojazdu lub rok wprowadzenia na rynek typu lub modelu pojazdu. Rok 1980 jest kodowany jako „A” i następne lata odpowiednimi kolejnymi literami aż do roku 2000, któremu odpowiada litera „Y”. Lata od 2001 do 2009 są kodowane cyframi od 1 do 9.

Zgodnie z normą ISO, w kodzie roku nie mogą występować litery I, O oraz Q, ponadto zwyczajowo nie stosuje się liter U i Z oraz cyfry 0. Wynika to z faktu, że te litery i cyfry jest łatwo z sobą pomylić.

Przykładowa tabelka:

KodRok
A1980
B1981
C1982
D1983
E1984
F1985
G1986
H1987
J1988
K1989
KodRok
L1990
M1991
N1992
P1993
R1994
S1995
T1996
V1997
W1998
X1999
KodRok
Y2000
12001
22002
32003
42004
52005
62006
72007
82008
92009
KodRok
A2010
B2011
C2012
D2013
E2014
F2015
G2016
H2017
J2018
K2019
KodRok
L2020
M2021
N2022
P2023
R2024
S2025
T2026
V2027
W2028
X2029
KodRok
Y2030
12031
22032
32033
42034
52035
62036
72037
82038
92039

Obliczenie cyfry kontrolnej

1. Należy znaleźć wartość liczbową odpowiadającą kolejnym, licząc od lewej, znakom VIN. Litery I, O oraz Q nie są dozwolone, ich obecność świadczy o błędzie. Cyfry przyjmują swoją wartość liczbową. Odpowiednie zamiany litery na cyfrę podaje tabela.

A: 1B: 2C: 3D: 4E: 5F: 6G: 7H: 8 —
J: 1K: 2L: 3M: 4N: 5 —P: 7 —R: 9
 —S: 2T: 3U: 4V: 5W: 6X: 7Y: 8Z: 9

2. Każdej pozycji znaku VIN (oprócz 9 – cyfra kontrolna) jest przypisana podana w tabeli waga.

1.: ×85.: ×410.: ×914.: ×5
2.: ×76.: ×311.: ×815.: ×4
3.: ×67.: ×212.: ×716.: ×3
4.: ×58.: ×1013.: ×617.: ×2

3. Należy pomnożyć odpowiadające literom i cyfrom wartości przez odpowiadające ich pozycji wagi i zsumować otrzymane iloczyny. Otrzymaną sumę należy podzielić przez 11, reszta dzielenia jest cyfrą kontrolną. Jeśli reszta wynosi 10 cyfrą kontrolną jest litera „X” (rzymska cyfra 10).

Przykład
Weźmy hipotetyczny VIN 1M8GDM9A_KP042788, w którym podkreślenie odpowiada miejscu cyfry kontrolnej.
       VIN: 1  M  8  G  D  M  9  A  _   K   P   0   4   2   7   8   8
   Wartość: 1  4  8  7  4  4  9  1  0   2   7   0   4   2   7   8   8
   Pozycja: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
      Waga: 8  7  6  5  4  3  2 10  0   9   8   7   6   5   4   3   2
   Iloczyn: 8 28 48 35 16 12 18 10  0  18  56   0  24  10  28  24  16
Suma wszystkich 16 iloczynów wynosi 351. Po podzieleniu przez 11 otrzymujemy resztę 10, a więc cyfrą kontrolną jest „X” i kompletny VIN ma postać 1M8GDM9AXKP042788.

Kody źródłowe obliczania cyfry kontrolnej

Kod źródłowy w Perlu
sub calcVINcheckdigit {
  my %lettervalue = (A => 1, B => 2, C => 3, D => 4,
                     E => 5, F => 6, G => 7, H => 8,
                     J => 1, K => 2, L => 3, M => 4,
                     N => 5, P => 7, R => 9, S => 2,
                     T => 3, U => 4, V => 5, W => 6,
                     X => 7, Y => 8, Z => 9, 1 => 1,
                     2 => 2, 3 => 3, 4 => 4, 5 => 5,
                     6 => 6, 7 => 7, 8 => 8, 9 => 9, 0 => 0);

  my @positionweight = (8, 7, 6, 5, 4, 3, 2, 10,
                        0, 9, 8, 7, 6, 5, 4, 3, 2);

  my @vinchar = split(//, $_[0]);
  my $total = 0;
  foreach my $ctr (0..16) {
    $total += $lettervalue{$vinchar[$ctr]} * $positionweight[$ctr];
  }
  return (($total % 11) == 10) ? "X" : ($total % 11);
}
Kod źródłowy w PHP
function calcVINcheckdigit($vin){
  //Uppercase to avoid errors
  $vin = strtoupper($vin);

  //$cv is the "converted value" of any digit
  $cv = array('A'=>1,'B'=>2,'C'=>3,'D'=>4,'E'=>5,'F'=>6,'G'=>7,'H'=>8,'J'=>1,
              'K'=>2,'L'=>3,'M'=>4,'N'=>5,'P'=>7,'R'=>9,'S'=>2,'T'=>3,'U'=>4,
              'V'=>5,'W'=>6,'X'=>7,'Y'=>8,'Z'=>9,'0'=>0,'1'=>1,'2'=>2,'3'=>3,
              '4'=>4,'5'=>5,'6'=>6,'7'=>7,'8'=>8,'9'=>9);

  //$multiplier is the number to multiply each digit by.
  $multiplier = array(8,7,6,5,4,3,2,10,0,9,8,7,6,5,4,3,2);

  $total = 0;
  for ($i=0; $i<17; ++$i) {
    $total += $cv[$vin[$i]] * $multiplier[$i];
  }

  //The idea is to get the remainder of $total/11
  //The remainder can be 0-10.  0-9 are their digits, and 10=X
  return ($total%11 == 10)? 'X':($total%11);
}
Kod źródłowy w Ruby
# assumes that the vin string has already been validated to prevent 
# the submission of case-insensitive letters I, O and Q. Otherwise
# nil errors will be thrown when searching the letter_value hash.
def is_checkdigit_valid
        
    # find the numerical value associated with each letter in the VIN. 
    # (I, O and Q are not allowed.) Digits use their own values.
    letter_value = {'A' => 1, 'B' => 2, 'C' => 3, 'D' => 4,
                    'E' => 5, 'F' => 6, 'G' => 7, 'H' => 8,
                    'J' => 1, 'K' => 2, 'L' => 3, 'M' => 4, 
                    'N' => 5, 'P' => 7, 'R' => 9, 'S' => 2,
                    'T' => 3, 'U' => 4, 'V' => 5, 'W' => 6,
                    'X' => 7, 'Y' => 8, 'Z' => 9, '1' => 1,
                    '2' => 2, '3' => 3, '4' => 4, '5' => 5,
                    '6' => 6, '7' => 7, '8' => 8, '9' => 9, '0' => 0}
   
    position_weight = [8, 7, 6, 5, 4, 3, 2, 10,
                       0, 9, 8, 7, 6, 5, 4, 3, 2]
                  
    #uppercase to prevent nil errors when searching the hash     
    vehicle_identification_number = vehicle_identification_number.upcase
    
    vin_chars = vehicle_identification_number.split('')
    total = 0
    for i in 0...17
      total += letter_value[vin_chars[i]] * position_weight[i]
    end
    
    check_digit = ((total % 11) == 10) ? 'X' : (total % 11)
    vin_chars[8] == check_digit 

end
Kod źródłowy w VB
    Public Function VIN(vin1to8 As String,
                        vin10to17 As String
                        ) As String
        ' Funkcja zwracająca pełny VIN z cyfrą kontrolną po podaniu pierwszych 8 i ostanich 8 liter numeru
        '
        Dim iloczyn = 0
        Dim i As Integer
        Dim cyfra_Kontrolna As Char
        If vin1to8.Count <> 8 Then Return ""
        If vin10to17.Count <> 8 Then Return ""

        Dim lettervalue As New Dictionary(Of Char, Integer) From {
        {"A"c, 1}, {"B"c, 2}, {"C"c, 3}, {"D"c, 4},
        {"E"c, 5}, {"F"c, 6}, {"G"c, 7}, {"H"c, 8},
        {"J"c, 1}, {"K"c, 2}, {"L"c, 3}, {"M"c, 4},
        {"N"c, 5}, {"P"c, 7}, {"R"c, 9}, {"S"c, 2},
        {"T"c, 3}, {"U"c, 4}, {"V"c, 5}, {"W"c, 6},
        {"X"c, 7}, {"Y"c, 8}, {"Z"c, 9}, {"1"c, 1},
        {"2"c, 2}, {"3"c, 3}, {"4"c, 4}, {"5"c, 5},
        {"6"c, 6}, {"7"c, 7}, {"8"c, 8}, {"9"c, 9}, {"0"c, 0}
        }

        Dim positionweight As New Dictionary(Of Integer, Integer) From {
          {1,8}, {2,7}, {3,6}, {4,5}, {5,4}, {6,3}, {7,2}, {8,10}, {9,0}, {10,9}, {11,8}, {12,7}, {13,6}, {14,5}, {15,4}, {16,3}, {17,2}
        }

        i = 1
        For Each litera As Char In vin1to8
            iloczyn += lettervalue(UCase(litera)) * positionweight(i)
            i += 1
        Next

        i = 10
        For Each litera As Char In vin10to17
            iloczyn += lettervalue(UCase(litera)) * positionweight(i)
            i += 1
        Next

        iloczyn = iloczyn Mod 11

        Select Case iloczyn
            Case 0 : cyfra_Kontrolna = "0"c
            Case 1 : cyfra_Kontrolna = "1"c
            Case 2 : cyfra_Kontrolna = "2"c
            Case 3 : cyfra_Kontrolna = "3"c
            Case 4 : cyfra_Kontrolna = "4"c
            Case 5 : cyfra_Kontrolna = "5"c
            Case 6 : cyfra_Kontrolna = "6"c
            Case 7 : cyfra_Kontrolna = "7"c
            Case 8 : cyfra_Kontrolna = "8"c
            Case 9 : cyfra_Kontrolna = "9"c
            Case 10 : cyfra_Kontrolna = "X"c
            Case Else : Return ""
        End Select

        Return vin1to8 & cyfra_Kontrolna & vin10to17
    End Function
Kod źródłowy w Javie
Ta implementacja nie wykorzystuje tablicy haszującej (mieszającej).
public class Vin {
    private static final int VIN_LENGTH = 17;
    private static final int[] weights = {8, 7, 6, 5, 4, 3, 2, 10, 0, 9, 8, 7, 6, 5, 4, 3, 2};

    public final String number;
    public final char checksum;

    Vin(final String number) {
        this.number = number.trim().toUpperCase();
        this.checksum = this.calcChecksum();
    }

    public boolean isChecksumValid() {
        return this.number.charAt(8) == this.checksum;
    }

    private final char calcChecksum() {
        int crc = 0;
        for (int i = 0; i < VIN_LENGTH; i++) {
            crc += weights[i] * this.resolveCharacterValue(this.number.charAt(i));
        }
        return (crc %= 11) == 10 ? 'X' : Character.forDigit(crc, 10);
    }

    private final int resolveCharacterValue(final int c) {
        return c <= '9' ? c - '0' : ((c >= 'S' ? c + 1 : c) - 'A') % 9 + 1;
    }
}

Dekoder VIN

Jest to aplikacja internetowa, której algorytm pozwala rozkodować informacje zawarte w numerze VIN pojazdu. W zależności od jakości stworzonego algorytmu, a także źródeł danych, dekodery mogą zwracać różną ilość informacji na temat sprawdzanego pojazdu. Różnić się może również sposób ich prezentacji. Najczęściej dostępne są one jednak w formie płatnego raportu historii pojazdu, dostępnego online bądź w formie pliku pdf.

Obecnie w polskim internecie dostępnych jest kilka dekoderów VIN, za pomocą których można łatwo wykonać sprawdzenie VIN, działających zarówno komercyjnie [8] [9] [10], jak i bezpłatnie[11][12]. Dodatkowo swój dekoder uruchomiła Centralna Ewidencja Pojazdów i Kierowców (CEPiK)[13]. Wymaga on jednak podania, oprócz numeru VIN, również numeru rejestracyjnego oraz daty pierwszej rejestracji.

Przypisy

  1. Dz.U. z 2022 r. poz. 988
  2. Gdzie szukać numeru VIN samochodu? Jak znaleźć VIN w aucie i dokumentach, ucando.pl, 4 lutego 2022 [dostęp 2022-03-15] (pol.).
  3. ROZPORZĄDZENIE WYKONAWCZE KOMISJI (UE) 2021/535, 8 sierpnia 2022 (pol.).
  4. AUTODNA, Numer VIN - autoDNA, www.autodna.pl [dostęp 2022-08-05] (pol.).
  5. AUTODNA, Numer VIN - autoDNA, www.autodna.pl [dostęp 2022-08-05] (pol.).
  6. https://pimot.lukasiewicz.gov.pl/nadawanie-kodow-wmi-vin | Nadawanie kodu WMI (VIN)
  7. EUR-Lex - 32021R0535 - EN - EUR-Lex, eur-lex.europa.eu [dostęp 2022-08-05] (ang.).
  8. Sprawdź za darmo VIN z CarVertical (pol.). raport płatny. [dostęp 2022-04-01].
  9. Autobaza.pl, Autobaza.pl - Wiarygodne Źródło Informacji o Pojazdach., www.autobaza.pl [dostęp 2022-08-05] (pol.).
  10. AUTODNA, Sprawdzenie VIN | Dekoder | Numer VIN - autoDNA, www.autodna.pl [dostęp 2022-08-05] (pol.).
  11. Dekodowanie numerów VIN (pol.). vindecoder.pl. [dostęp 2017-02-17].
  12. Dekoder VIN (pol.). dekoder-vin.pl. [dostęp 2017-02-17].
  13. Historia pojazdu (pol.). historiapojazdu.gov.pl. [dostęp 2017-02-17].

Media użyte na tej stronie