Loading AI tools
unikatowy kod zawierający numer seryjny; wykorzystywany w przemyśle motoryzacyjnym do identyfikacji poszczególnych pojazdów silnikowych, motocykli i skuterów Z Wikipedii, wolnej encyklopedii
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].
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 VIN funkcjonował, jednak zestawy informacji w nim zawarte były wprowadzane stopniowo. W przypadku nowych typów pojazdów kategorii M, N i O od 6 lipca 2022 roku obowiązuje rozporządzenie wykonawcze komisji (UE) 2021/535, zgodnie z którym w numerze identyfikacyjnym pojazdu (VIN) należy zawrzeć cyfrę kontrolną[3].
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.
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[4].
Numer VIN składa się z następujących sekcji:
Standard | W | V | W | Z | Z | Z | 6 | R | Z | H | U | 0 | 9 | 5 | 4 | 7 | 2 | ||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ISO 3779 | WMI | VDS | VIS | ||||||||||||||||
Ameryka Północna | Identyfikacja producenta | Atrybuty typu | Cyfra kontrolna | Rok produkcji | Kod zakładu | Numer egzemplarza |
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[5]
WMI | Region | Uwagi |
---|---|---|
A-H | Afryka | AA-AH = RPA |
J-R | Azja | J = Japonia KL-KR = Korea Płd. L = Chiny MA-ME = Indie MF-MK = Indonezja ML-MR = Tajlandia PA-PE = Filipiny PL-PR = Malezja |
S-Z | Europa | SA-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-5 | Ameryka Północna | 1, 4, 5 = Stany Zjednoczone 2 = Kanada 3 = Meksyk |
6-7 | Oceania | 6A-6W = Australia 7A-7E = Nowa Zelandia |
8-0 | Ameryka Południowa | 8A-8E = Argentyna 8X-82 = Wenezuela 9A-9E, 93-99 = Brazylia 9F-9J = Kolumbia |
Pełniejsza lista na angielskiej Wiki [6]
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.
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.
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:
Kod | Rok |
---|---|
A | 1980 |
B | 1981 |
C | 1982 |
D | 1983 |
E | 1984 |
F | 1985 |
G | 1986 |
H | 1987 |
J | 1988 |
K | 1989 |
Kod | Rok |
---|---|
L | 1990 |
M | 1991 |
N | 1992 |
P | 1993 |
R | 1994 |
S | 1995 |
T | 1996 |
V | 1997 |
W | 1998 |
X | 1999 |
Kod | Rok |
---|---|
Y | 2000 |
1 | 2001 |
2 | 2002 |
3 | 2003 |
4 | 2004 |
5 | 2005 |
6 | 2006 |
7 | 2007 |
8 | 2008 |
9 | 2009 |
Kod | Rok |
---|---|
A | 2010 |
B | 2011 |
C | 2012 |
D | 2013 |
E | 2014 |
F | 2015 |
G | 2016 |
H | 2017 |
J | 2018 |
K | 2019 |
Kod | Rok |
---|---|
L | 2020 |
M | 2021 |
N | 2022 |
P | 2023 |
R | 2024 |
S | 2025 |
T | 2026 |
V | 2027 |
W | 2028 |
X | 2029 |
Kod | Rok |
---|---|
Y | 2030 |
1 | 2031 |
2 | 2032 |
3 | 2033 |
4 | 2034 |
5 | 2035 |
6 | 2036 |
7 | 2037 |
8 | 2038 |
9 | 2039 |
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: 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 |
2. Każdej pozycji znaku VIN (oprócz 9 – cyfra kontrolna) jest przypisana podana w tabeli waga.
1.: ×8 | 2.: ×7 | 3.: ×6 | 4.: ×5 | 5.: ×4 | 6.: ×3 | 7.: ×2 | 8.: ×10 | 9.: Cyfra kontrolna | 10.: ×9 |
11.: ×8 | 12.: ×7 | 13.: ×6 | 14.: ×5 | 15.: ×4 | 16.: ×3 | 17.: ×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).
Pozycja: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 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 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
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);
}
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);
}
# 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
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 ostatnich 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
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;
}
}
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 odpłatnie wykonać sprawdzenie VIN[8][9][10], jak i bezpłatnie[11]. Dodatkowo swój dekoder uruchomiła Centralna Ewidencja Pojazdów i Kierowców (CEPiK)[12][13]. Wymaga on jednak podania, oprócz numeru VIN, również numeru rejestracyjnego oraz daty pierwszej rejestracji.