Vehicle Identification Number
Z Wikipedii
VIN (Vehicle Identification Number) – unikalny numer identyfikacyjny pojazdów mechanicznych. 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.
Spis treści |
[edytuj] Format zapisu VIN
Są dwa sposoby zapisu numeru identyfikacyjnego pojazdu. W Unii Europejskiej jest stosowana norma ISO-3779, w Ameryce Północnej jest stosowany format bardziej surowy (liczba kontrolna), ale kompatybilny z europejskim.
Numer VIN składa się z następujących sekcji:
Standard | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | ||
ISO 3779 | WMI | VDS | VIS | ||||||||||||||||
Ameryka Północna | Identyfikacja producenta | Atrybuty typu | Liczba kontrolna | Rok produkcji | Kod zakładu | Numer egzemplarza |
[edytuj] Światowa identyfikacja producenta
WMI (World Manufacturer Identifier) –
[edytuj] Regiony WMI
Pierwszy znak WMI określa region, w którym znajduje się producent. W praktyce każdy jest przypisany krajowi, w którym znajduje się producent. Zaznaczono najpopularniejsze kraje produkcji.
WMI | Region | Uwagi |
A-H | Afryka | AA-AH = RPA |
J-R | Azja | J = Japonia KL-KR = Korea Płd. L = Chiny MA-ME = India MF-MK = Indonezja ML-MR = Thailandia 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 = Republika Czeska 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 Zealandia |
8-0 | Ameryka Południowa | 8A-8E = Argentyna 8X-82 = Wenezuela 9A-9E, 93-99 = Brazylia 9F-9J = Kolumbia |
[edytuj] Lista WMI niektórych producentów
SAE przydzieliło krajom i producentom symbole WIM. Tablica zawiera często spotykane symbole, jednak istnieje wiele innych.
WMI | Producent |
JA | Isuzu |
JF | Fuji Heavy Industries (Subaru) |
JH | Honda |
JK | Kawasaki (motocykle) |
JM | Mazda |
JN | Nissan |
JS | Suzuki |
JT | Toyota |
KL | Daewoo |
KMH | Hyundai |
KN | Kia |
SAL | Land Rover |
SAJ | Jaguar |
SCC | Lotus Cars |
TRU | Audi |
VF1 | Renault |
VF3 | Peugeot |
VF7 | Citroën |
VSS | SEAT |
WAU | Audi |
WBA | BMW |
WBS | BMW M |
WDB | Mercedes-Benz |
WMW | MINI |
WP0 | Porsche |
W0L | Opel |
WVW | Volkswagen |
WV1 | Volkswagen Commercial Vehicles |
WV2 | Volkswagen Bus/Van |
YK1 | Saab |
YS3 | Saab |
YV1 | Volvo Cars |
ZDF | Ferrari Dino |
ZFA | Fiat |
ZFF | Ferrari |
1FB | Ford Motor Company |
1FC | Ford Motor Company |
1FD | Ford Motor Company |
1FM | Ford Motor Company |
1FU | Freightliner |
1FV | Freightliner |
1F9 | FWD Corp. |
1G | General Motors |
1GC | Chevrolet |
1GM | Pontiac |
1H | Honda USA |
1L | Lincoln |
1M? | Mercury |
1M1 | Mack Truck |
1M2 | Mack Truck |
1M3 | Mack Truck |
1M4 | Mack Truck |
1N | Nissan USA |
1VW | Volkswagen USA |
1YV | Mazda USA |
2FB | Ford Motor Company Kanada |
2FC | Ford Motor Company Kanada |
2FM | Ford Motor Company Kanada |
2FT | Ford Motor Company Kanada |
2FU | Freightliner |
2FV | Freightliner |
2M | Mercury |
2G | General Motors Kanada |
2G1 | Chevrolet Kanada |
2G1 | Pontiac Kanada |
2HM | Hyundai Kanada |
2WK | Western Star |
2WL | Western Star |
2WM | Western Star |
3FE | Ford Motor Company Meksyk |
3G | General Motors Meksyk |
3VW | Volkswagen Meksyk |
9BW | Volkswagen Brazylia |
4F | Mazda USA |
4M | Mercury |
4S | Subaru-Isuzu Automotive |
4US | BMW USA |
VT | Yamaha (motocykle) |
4V1 | Volvo |
4V2 | Volvo |
4V3 | Volvo |
4V4 | Volvo |
4V5 | Volvo |
4V6 | Volvo |
4VL | Volvo |
4VM | Volvo |
4VZ | Volvo |
5L | Lincoln |
6F | Ford Motor Company Australia |
6H | General Motors-Holden |
6MM | Mitsubishi Motors Australia |
6T1 | Toyota Australia |
[edytuj] Sekcja określająca typ
VDS (Vehicle Descriptor Section) –
Znaki na pozycjach od 4 do 9 należą do sekcji określającej typ pojazdu. Są one używane, w zależności od lokalnych regulacji, do identyfikacji typu pojazdu i mogą zawierać informacje o konstrukcji i rodzaju nadwozia. Każdy producent ma własny system wykorzystywania tego pola.
[edytuj] Cyfra kontrolna (Ameryka Północna)
Element znajdujący się na 9 pozycji pełni rolę liczby kontrolnej VIN pojazdów z Ameryki Północnej.
[edytuj] Numer własny egzemplarza
VIS (Vehicle Identifier Section) –
Znaki na pozycjach od 10 do 17 są wykorzystywane do nadania unikatowego numeru pojazdu. Jest wykorzystywany przez producenta w przypadku reklamacji. Zawiera informacje o zainstalowanych opcjach wykonania, silniku, rodzaju napędu; często jest jednak po prostu kolejnym numerem. W ostatnie pięć znaków stanowią zawsze cyfry.
[edytuj] Rok produkcji w Ameryce Północnej
Znak na pozycji 10 jest w Ameryce Północnej wykorzystywany do kodowania roku produkcji.
[edytuj] 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.
[edytuj] Kod roku produkcji
Poza trzema literami, które nie mogą występować w VIN (I, O oraz Q) do kodowania roku nie stosuje się liter U i Z oraz cyfry 0. Należy pamiętać, że kod roku może informować o roku produkcji, ale też o roku 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.
[edytuj] Obliczenie liczby kontrolnej
1. Należy znaleźć wartość liczbową odpowiadającą kolejnym znakom VIN. Litery I, O oraz Q nie są dozwolone, ich obecność świadczy o błędzie. Cyfry przyjmują swoją wartość liczbową. Odpowiednie wartości podaje tabela.
A: 1 | J: 1 | |
B: 2 | K: 2 | S: 2 |
C: 3 | L: 3 | T: 3 |
D: 4 | M: 4 | U: 4 |
E: 5 | N: 5 | V: 5 |
F: 6 | W: 6 | |
G: 7 | P: 7 | X: 7 |
H: 8 | Y: 8 | |
R: 9 | Z: 9 |
2. Każdej pozycji znaku VIN (oprócz 9 – liczba kontrolna) jest przypisana podana w tabeli waga.
1.: ×8 | 5.: ×4 | 10.: ×9 | 14.: ×5 |
2.: ×7 | 6.: ×3 | 11.: ×8 | 15.: ×4 |
3.: ×6 | 7.: ×2 | 12.: ×7 | 16.: ×3 |
4.: ×5 | 8.: ×10 | 13.: ×6 | 17.: ×2 |
3. Należy pomnożyć odpowiadające literom i liczbom wartości przez odpowiadające ich pozycji wagi i zsumować otrzymane iloczyny. Otrzymaną sumę należy podzielić przez 11, reszta dzielenia jest liczbą kontrolną. Jeśli reszta wynosi 10 liczbą kontrolną jest litera "X".
[edytuj] Przykład
Weźmy hipotetyczny VIN 1M8GDM9A_KP042788, w którym podkreślenie odpowiada miejscu liczby 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 liczbą kontrolną jest "X" i kompletny VIN ma postać 1M8GDM9AXKP042788.
[edytuj] 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; for (my $ctr = 0; $ctr < 17; $ctr++) { $total += $lettervalue{$vinchar[$ctr]} * $positionweight[$ctr]; } return (($total % 11) == 10) ? "X" : ($total % 11); }
[edytuj] 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[$this->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); }
[edytuj] 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(/\s*/) 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