vindetta 0.25.0 → 0.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/Gemfile +2 -0
- data/Guardfile +2 -0
- data/README.md +1 -1
- data/Rakefile +2 -0
- data/bin/console +1 -0
- data/exe/vindetta +2 -0
- data/lib/vindetta.rb +2 -1
- data/lib/vindetta/calculator.rb +9 -7
- data/lib/vindetta/cli.rb +2 -0
- data/lib/vindetta/decoder.rb +23 -8
- data/lib/vindetta/generator.rb +12 -13
- data/lib/vindetta/standard.rb +3 -1
- data/lib/vindetta/standard/iso3779.rb +15 -51
- data/lib/vindetta/standard/iso3779.yml +63 -0
- data/lib/vindetta/validator.rb +7 -11
- data/lib/vindetta/version.rb +3 -1
- data/vindetta.gemspec +3 -1
- metadata +4 -5
- data/lib/vindetta/data/wmi.yaml +0 -474
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: d17115ba1622676f7ec5f5754946f226cbda385ec41b0bb76c269d07b9d9657b
|
4
|
+
data.tar.gz: a639b9184e39f2a630fb6535c65f2c4c0ae36a1f8555c98712d7e5688d555954
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bbd07e6cfdc8b0c7eeb0ba7923231289b1fc73be6866ecb3a7cb792bf5fa1d0bd2b7c8e4c145f9cf12270e211aa8e92d4bdb2e0072221204bcadefe1ac8a7b8d
|
7
|
+
data.tar.gz: 52fce861df144063ad9d52c3d57c6aa45c38c4abe1c6953b258cad252aa02e1d63809c643591b54d7243a3236acee71ee57cb9b415fbe4648adee26eb78abe5e
|
data/Gemfile
CHANGED
data/Guardfile
CHANGED
data/README.md
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# Vindetta
|
2
|
-
|
2
|
+
[](http://rubygems.org/gems/vindetta)
|
3
3
|
[](https://travis-ci.org/kyledecot/vindetta)
|
4
4
|
[](https://codeclimate.com/github/kyledecot/vindetta)
|
5
5
|
|
data/Rakefile
CHANGED
data/bin/console
CHANGED
data/exe/vindetta
CHANGED
data/lib/vindetta.rb
CHANGED
data/lib/vindetta/calculator.rb
CHANGED
@@ -1,25 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Vindetta
|
2
4
|
class Calculator
|
3
5
|
InvalidCharacterError = Class.new(StandardError)
|
4
6
|
|
5
7
|
def self.check_digit(vin)
|
6
|
-
transliterator =
|
8
|
+
transliterator = lambda do |c|
|
7
9
|
index = "0123456789.ABCDEFGH..JKLMN.P.R..STUVWXYZ".chars.index(c)
|
8
10
|
|
9
11
|
raise InvalidCharacterError if index.nil?
|
10
12
|
|
11
|
-
|
13
|
+
index % 10
|
12
14
|
end
|
13
15
|
|
14
|
-
summer =
|
16
|
+
summer = lambda do |sum, (a, b)|
|
15
17
|
sum + (a * b)
|
16
18
|
end
|
17
19
|
|
18
20
|
sum = vin
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
21
|
+
.chars
|
22
|
+
.map(&transliterator)
|
23
|
+
.zip([8, 7, 6, 5, 4, 3, 2, 10, 0, 9, 8, 7, 6, 5, 4, 3, 2])
|
24
|
+
.reduce(0, &summer)
|
23
25
|
|
24
26
|
"0123456789X"[sum % 11]
|
25
27
|
end
|
data/lib/vindetta/cli.rb
CHANGED
data/lib/vindetta/decoder.rb
CHANGED
@@ -1,7 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Vindetta
|
2
4
|
class Decoder
|
5
|
+
attr_reader :standard
|
6
|
+
|
3
7
|
BASE_MODEL_YEAR = 1980
|
4
|
-
ALPHA = (
|
8
|
+
ALPHA = ("A".."Z").to_a
|
5
9
|
NUMERIC = ("0".."9").to_a
|
6
10
|
|
7
11
|
def initialize(standard)
|
@@ -9,19 +13,30 @@ module Vindetta
|
|
9
13
|
end
|
10
14
|
|
11
15
|
def vin(vin)
|
12
|
-
|
13
|
-
:
|
14
|
-
:
|
15
|
-
:
|
16
|
-
:
|
17
|
-
:
|
16
|
+
{
|
17
|
+
plant_code: vin[PLANT_CODE_INDEX],
|
18
|
+
wmi: vin[WMI_RANGE],
|
19
|
+
check_digit: vin[CHECK_DIGIT_INDEX],
|
20
|
+
production_number: vin[PRODUCTION_NUMBER_RANGE],
|
21
|
+
model_year: model_year(vin),
|
22
|
+
region: region(vin)
|
18
23
|
}
|
19
24
|
end
|
20
25
|
|
21
26
|
private
|
22
27
|
|
28
|
+
def region(vin)
|
29
|
+
character = vin[0]
|
30
|
+
position = standard.wmi.detect { |p| p["name"] == "region" }
|
31
|
+
|
32
|
+
position["mapping"][character]
|
33
|
+
end
|
34
|
+
|
23
35
|
def model_year(vin)
|
24
|
-
|
36
|
+
position = standard.vis.detect { |p| p["name"] === "model_year" }
|
37
|
+
characters = position["characters"]
|
38
|
+
|
39
|
+
index = characters.find_index { |c| c == vin[9] }
|
25
40
|
|
26
41
|
if ALPHA.include?(vin[6])
|
27
42
|
BASE_MODEL_YEAR + index + 30
|
data/lib/vindetta/generator.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Vindetta
|
2
4
|
class Generator
|
3
5
|
attr_reader :standard
|
@@ -6,31 +8,28 @@ module Vindetta
|
|
6
8
|
@standard = standard
|
7
9
|
end
|
8
10
|
|
9
|
-
def vin(
|
10
|
-
"#{wmi}#{vds}#{vis}".tap do |vin|
|
11
|
+
def vin(_options = {})
|
12
|
+
String.new("#{wmi}#{vds}#{vis}").tap do |vin|
|
11
13
|
vin[CHECK_DIGIT_INDEX] = Calculator.check_digit(vin)
|
12
14
|
end
|
13
15
|
end
|
14
16
|
|
15
17
|
def wmi(_options = {})
|
16
|
-
|
17
|
-
path = File.expand_path("../data/wmi.yaml", __FILE__)
|
18
|
-
YAML.load_file(path)["wmi"].keys
|
19
|
-
end
|
20
|
-
|
21
|
-
"#{@wmis.sample}".rjust(standard.wmi.length, "9")
|
18
|
+
characters("wmi").map(&:sample).join
|
22
19
|
end
|
23
20
|
|
24
21
|
def vds(_options = {})
|
25
|
-
characters
|
26
|
-
|
27
|
-
characters.map(&:sample).join
|
22
|
+
characters("vds").map(&:sample).join
|
28
23
|
end
|
29
24
|
|
30
25
|
def vis(_options = {})
|
31
|
-
characters
|
26
|
+
characters("vis").map(&:sample).join
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
32
30
|
|
33
|
-
|
31
|
+
def characters(section)
|
32
|
+
standard.send(section).map { |p| p["characters"] }
|
34
33
|
end
|
35
34
|
end
|
36
35
|
end
|
data/lib/vindetta/standard.rb
CHANGED
@@ -1,65 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Vindetta
|
2
4
|
module Standard
|
3
5
|
class ISO3779
|
4
|
-
LENGTH = 17
|
5
|
-
|
6
6
|
def self.wmi
|
7
|
-
|
8
|
-
|
9
|
-
|
7
|
+
@wmi ||= yml.fetch("wmi")
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.length
|
11
|
+
@length ||= yml.fetch("length")
|
10
12
|
end
|
11
13
|
|
12
14
|
def self.vds
|
13
|
-
@vds ||=
|
14
|
-
OpenStruct.new({
|
15
|
-
:characters => "0123456789ABCDEFGHJKLMNPRSTUVWXYZ".chars
|
16
|
-
}),
|
17
|
-
OpenStruct.new({
|
18
|
-
:characters => "0123456789ABCDEFGHJKLMNPRSTUVWXYZ".chars
|
19
|
-
}),
|
20
|
-
OpenStruct.new({
|
21
|
-
:characters => "0123456789ABCDEFGHJKLMNPRSTUVWXYZ".chars
|
22
|
-
}),
|
23
|
-
OpenStruct.new({
|
24
|
-
:characters => "0123456789ABCDEFGHJKLMNPRSTUVWXYZ".chars
|
25
|
-
}),
|
26
|
-
OpenStruct.new({
|
27
|
-
:characters => "0123456789ABCDEFGHJKLMNPRSTUVWXYZ".chars
|
28
|
-
}),
|
29
|
-
OpenStruct.new({
|
30
|
-
:characters => "0123456789ABCDEFGHJKLMNPRSTUVWXYZ".chars
|
31
|
-
})
|
32
|
-
]
|
15
|
+
@vds ||= yml.fetch("vds")
|
33
16
|
end
|
34
17
|
|
35
18
|
def self.vis
|
36
|
-
@vis ||=
|
37
|
-
OpenStruct.new({
|
38
|
-
:characters => ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "R", "S", "T", "V", "W", "X", "Y"]
|
39
|
-
}),
|
40
|
-
OpenStruct.new({
|
41
|
-
:characters => ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
|
42
|
-
}),
|
43
|
-
OpenStruct.new({
|
44
|
-
:characters => ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
|
45
|
-
}),
|
46
|
-
OpenStruct.new({
|
47
|
-
:characters => ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
|
48
|
-
}),
|
49
|
-
OpenStruct.new({
|
50
|
-
:characters => ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
|
51
|
-
}),
|
52
|
-
OpenStruct.new({
|
53
|
-
:characters => ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
|
54
|
-
}),
|
55
|
-
OpenStruct.new({
|
56
|
-
:characters => ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
|
57
|
-
}),
|
58
|
-
OpenStruct.new({
|
59
|
-
:characters => ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
|
60
|
-
})
|
61
|
-
]
|
19
|
+
@vis ||= yml.fetch("vis")
|
62
20
|
end
|
21
|
+
|
22
|
+
def self.yml
|
23
|
+
@yml ||= YAML.load_file("lib/vindetta/standard/iso3779.yml")
|
24
|
+
end
|
25
|
+
|
26
|
+
private_class_method :yml
|
63
27
|
end
|
64
28
|
end
|
65
29
|
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
---
|
2
|
+
length: 17
|
3
|
+
|
4
|
+
wmi:
|
5
|
+
- name: region
|
6
|
+
characters: ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
|
7
|
+
mapping:
|
8
|
+
"A": Africa
|
9
|
+
"B": Africa
|
10
|
+
"C": Africa
|
11
|
+
"D": Africa
|
12
|
+
"E": Africa
|
13
|
+
"F": Africa
|
14
|
+
"G": Africa
|
15
|
+
"H": Africa
|
16
|
+
"J": Asia
|
17
|
+
"K": Asia
|
18
|
+
"L": Asia
|
19
|
+
"M": Asia
|
20
|
+
"N": Asia
|
21
|
+
"P": Asia
|
22
|
+
"R": Asia
|
23
|
+
"S": Europe
|
24
|
+
"T": Europe
|
25
|
+
"U": Europe
|
26
|
+
"V": Europe
|
27
|
+
"W": Europe
|
28
|
+
"X": Europe
|
29
|
+
"Y": Europe
|
30
|
+
"Z": Europe
|
31
|
+
"1": North America
|
32
|
+
"2": North America
|
33
|
+
"3": North America
|
34
|
+
"4": North America
|
35
|
+
"5": South America
|
36
|
+
"6": Oceania
|
37
|
+
"7": Oceania
|
38
|
+
"8": South America
|
39
|
+
"9": South America
|
40
|
+
"0": South America
|
41
|
+
- name: country
|
42
|
+
characters: ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
|
43
|
+
- name: manufacturer
|
44
|
+
characters: ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
|
45
|
+
|
46
|
+
vds:
|
47
|
+
- characters: ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
|
48
|
+
- characters: ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
|
49
|
+
- characters: ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
|
50
|
+
- characters: ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
|
51
|
+
- characters: ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
|
52
|
+
- characters: ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
|
53
|
+
vis:
|
54
|
+
-
|
55
|
+
name: model_year
|
56
|
+
characters: ["A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "R", "S", "T", "V", "W", "X", "Y", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
|
57
|
+
- characters: ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
|
58
|
+
- characters: ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
|
59
|
+
- characters: ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
|
60
|
+
- characters: ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
|
61
|
+
- characters: ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
|
62
|
+
- characters: ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
|
63
|
+
- characters: ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
|
data/lib/vindetta/validator.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Vindetta
|
2
4
|
class Validator
|
3
5
|
attr_reader :standard
|
@@ -7,29 +9,23 @@ module Vindetta
|
|
7
9
|
end
|
8
10
|
|
9
11
|
def vin(vin)
|
10
|
-
return false unless vin.length == standard
|
12
|
+
return false unless vin.length == standard.length
|
11
13
|
|
12
14
|
Calculator.check_digit(vin) == Decoder.new(Vindetta::Standard::ISO3779).vin(vin)[:check_digit]
|
13
15
|
rescue Calculator::InvalidCharacterError
|
14
|
-
|
16
|
+
false
|
15
17
|
end
|
16
18
|
|
17
19
|
def wmi(wmi)
|
18
|
-
|
19
|
-
|
20
|
-
true
|
20
|
+
wmi.length == standard.wmi.length
|
21
21
|
end
|
22
22
|
|
23
23
|
def vds(vds)
|
24
|
-
|
25
|
-
|
26
|
-
true
|
24
|
+
vds.length == standard.vds.length
|
27
25
|
end
|
28
26
|
|
29
27
|
def vis(vis)
|
30
|
-
|
31
|
-
|
32
|
-
true
|
28
|
+
vis.length == standard.vis.length
|
33
29
|
end
|
34
30
|
end
|
35
31
|
end
|
data/lib/vindetta/version.rb
CHANGED
data/vindetta.gemspec
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vindetta
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.26.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kyle Decot
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-04-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: gli
|
@@ -161,12 +161,12 @@ files:
|
|
161
161
|
- lib/vindetta.rb
|
162
162
|
- lib/vindetta/calculator.rb
|
163
163
|
- lib/vindetta/cli.rb
|
164
|
-
- lib/vindetta/data/wmi.yaml
|
165
164
|
- lib/vindetta/decoder.rb
|
166
165
|
- lib/vindetta/generator.rb
|
167
166
|
- lib/vindetta/locale/en.yml
|
168
167
|
- lib/vindetta/standard.rb
|
169
168
|
- lib/vindetta/standard/iso3779.rb
|
169
|
+
- lib/vindetta/standard/iso3779.yml
|
170
170
|
- lib/vindetta/validator.rb
|
171
171
|
- lib/vindetta/version.rb
|
172
172
|
- vindetta.gemspec
|
@@ -189,8 +189,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
189
189
|
- !ruby/object:Gem::Version
|
190
190
|
version: '0'
|
191
191
|
requirements: []
|
192
|
-
|
193
|
-
rubygems_version: 2.6.11
|
192
|
+
rubygems_version: 3.0.3
|
194
193
|
signing_key:
|
195
194
|
specification_version: 4
|
196
195
|
summary: Ruby gem for generating VINs
|
data/lib/vindetta/data/wmi.yaml
DELETED
@@ -1,474 +0,0 @@
|
|
1
|
-
---
|
2
|
-
|
3
|
-
wmi:
|
4
|
-
AAV: Volkswagen South Africa
|
5
|
-
AC5: Hyundai South Africa
|
6
|
-
ADD: Hyundai South Africa
|
7
|
-
AFA: Ford South Africa
|
8
|
-
AHT: Toyota South Africa
|
9
|
-
JA3: Mitsubishi
|
10
|
-
JA4: Mitsubishi
|
11
|
-
JA: Isuzu
|
12
|
-
JD: Daihatsu
|
13
|
-
JF: Fuji Heavy Industries (Subaru)
|
14
|
-
JH: Honda
|
15
|
-
JK: Kawasaki (motorcycles)
|
16
|
-
JL5: Mitsubishi Fuso
|
17
|
-
JMB: Mitsubishi Motors
|
18
|
-
JMY: Mitsubishi Motors
|
19
|
-
JMZ: Mazda
|
20
|
-
JN: Nissan
|
21
|
-
JS: Suzuki
|
22
|
-
JT: Toyota
|
23
|
-
JY: Yamaha (motorcycles)
|
24
|
-
KL: Daewoo General Motors South Korea
|
25
|
-
KM: Hyundai
|
26
|
-
KMY: Daelim (motorcycles)
|
27
|
-
KM1: Hyosung (motorcycles)
|
28
|
-
KN: Kia
|
29
|
-
KNM: Renault Samsung
|
30
|
-
KPA: SsangYong
|
31
|
-
KPT: SsangYong
|
32
|
-
LAN: Changzhou Yamasaki Motorcycle
|
33
|
-
LBB: Zhejiang Qianjiang Motorcycle (Keeway/Generic)
|
34
|
-
LBE: Beijing Hyundai
|
35
|
-
LBM: Zongshen Piaggio
|
36
|
-
LBP: Chongqing Jainshe Yamaha (motorcycles)
|
37
|
-
LB2: Geely Motorcycles
|
38
|
-
LCE: Hangzhou Chunfeng Motorcycles (CFMOTO)
|
39
|
-
LDC: Dong Feng Peugeot Citroen (DPCA), China
|
40
|
-
LDD: Dandong Huanghai Automobile
|
41
|
-
LDN: SouEast Motor
|
42
|
-
LDY: Zhongtong Coach, China
|
43
|
-
LET: Jiangling-Isuzu Motors, China
|
44
|
-
LE4: Beijing Benz, China
|
45
|
-
LFB: FAW, China (busses)
|
46
|
-
LFG: Taizhou Chuanl Motorcycle Manufacturing
|
47
|
-
LFP: FAW, China (passenger vehicles)
|
48
|
-
LFT: FAW, China (trailers)
|
49
|
-
LFV: FAW-Volkswagen, China
|
50
|
-
LFW: FAW JieFang, China
|
51
|
-
LFY: Changshu Light Motorcycle Factory
|
52
|
-
LGB: Dong Feng (DFM), China
|
53
|
-
LGH: Qoros (formerly Dong Feng (DFM)), China
|
54
|
-
LGX: BYD Auto, China
|
55
|
-
LHB: Beijing Automotive Industry Holding
|
56
|
-
LH1: FAW-Haima, China
|
57
|
-
LJC: JAC, China
|
58
|
-
LJ1: JAC, China
|
59
|
-
LKL: Suzhou King Long, China
|
60
|
-
LL6: Hunan Changfeng Manufacture Joint-Stock
|
61
|
-
LL8: Linhai (ATV)
|
62
|
-
LMC: Suzuki Hong Kong (motorcycles)
|
63
|
-
LPR: Yamaha Hong Kong (motorcycles)
|
64
|
-
LSG: Shanghai General Motors, China
|
65
|
-
LSJ: MG Motor UK Limited - SAIC Motor, Shanghai, China
|
66
|
-
LSV: Shanghai Volkswagen, China
|
67
|
-
LSY: Brilliance Zhonghua
|
68
|
-
LTV: Toyota Tian Jin
|
69
|
-
LUC: Guangqi Honda, China
|
70
|
-
LVS: Ford Chang An
|
71
|
-
LVV: Chery, China
|
72
|
-
LVZ: Dong Feng Sokon Motor Company (DFSK)
|
73
|
-
LZM: MAN China
|
74
|
-
LZE: Isuzu Guangzhou, China
|
75
|
-
LZG: Shaanxi Automobile Group, China
|
76
|
-
LZP: Zhongshan Guochi Motorcycle (Baotian)
|
77
|
-
LZY: Yutong Zhengzhou, China
|
78
|
-
LZZ: Chongqing Shuangzing Mech & Elec (Howo)
|
79
|
-
L4B: Xingyue Group (motorcycles)
|
80
|
-
L5C: KangDi (ATV)
|
81
|
-
L5K: Zhejiang Yongkang Easy Vehicle
|
82
|
-
L5N: Zhejiang Taotao, China (ATV & motorcycles)
|
83
|
-
L5Y: Merato Motorcycle Taizhou Zhongneng
|
84
|
-
L85: Zhejiang Yongkang Huabao Electric Appliance
|
85
|
-
L8X: Zhejiang Summit Huawin Motorcycle
|
86
|
-
MAB: Mahindra & Mahindra
|
87
|
-
MAC: Mahindra & Mahindra
|
88
|
-
MAJ: Ford India
|
89
|
-
MAK: Honda Siel Cars India
|
90
|
-
MAL: Hyundai
|
91
|
-
MAT: Tata Motors
|
92
|
-
MA1: Mahindra & Mahindra
|
93
|
-
MA3: Suzuki India (Maruti)
|
94
|
-
MA6: GM India
|
95
|
-
MA7: Mitsubishi India (formerly Honda)
|
96
|
-
MBH: Suzuki India (Maruti)
|
97
|
-
MBJ: Toyota India
|
98
|
-
MBR: Mercedes-Benz India
|
99
|
-
MB1: Ashok Leyland
|
100
|
-
MCA: Fiat India
|
101
|
-
MCB: GM India
|
102
|
-
MC2: Volvo Eicher commercial vehicles limited.
|
103
|
-
MDH: Nissan India
|
104
|
-
MD2: Bajaj Auto
|
105
|
-
MEE: Renault India
|
106
|
-
MEX: Volkswagen India
|
107
|
-
MHF: Toyota Indonesia
|
108
|
-
MHR: Honda Indonesia
|
109
|
-
MLC: Suzuki Thailand
|
110
|
-
MLH: Honda Thailand
|
111
|
-
MMB: Mitsubishi Thailand
|
112
|
-
MMC: Mitsubishi Thailand
|
113
|
-
MMM: Chevrolet Thailand
|
114
|
-
MMT: Mitsubishi Thailand
|
115
|
-
MM8: Mazda Thailand
|
116
|
-
MNB: Ford Thailand
|
117
|
-
MNT: Nissan Thailand
|
118
|
-
MPA: Isuzu Thailand
|
119
|
-
MP1: Isuzu Thailand
|
120
|
-
MRH: Honda Thailand
|
121
|
-
MR0: Toyota Thailand
|
122
|
-
NLA: Honda Türkiye
|
123
|
-
NLE: Mercedes-Benz Türk Truck
|
124
|
-
NLH: Hyundai Assan
|
125
|
-
NLT: TEMSA
|
126
|
-
NMB: Mercedes-Benz Türk Buses
|
127
|
-
NMC: BMC
|
128
|
-
NM0: Ford Turkey
|
129
|
-
NM4: Tofaş Türk
|
130
|
-
NMT: Toyota Türkiye
|
131
|
-
NNA: Isuzu Turkey
|
132
|
-
PE1: Ford Phillipines
|
133
|
-
PE3: Mazda Phillipines
|
134
|
-
PL1: Proton, Malaysia
|
135
|
-
PNA: NAZA, Malaysia (Peugeot)
|
136
|
-
RA1: Steyr Trucks International FZE, UAE
|
137
|
-
RFB: Kymco, Taiwan
|
138
|
-
RFG: Sanyang SYM, Taiwan
|
139
|
-
RFL: Adly, Taiwan
|
140
|
-
RFT: CPI, Taiwan
|
141
|
-
RF3: Aeon Motor, Taiwan
|
142
|
-
SAL: Land Rover
|
143
|
-
SAJ: Jaguar
|
144
|
-
SAR: Rover
|
145
|
-
SB1: Toyota UK
|
146
|
-
SBM: McLaren
|
147
|
-
SCA: Rolls Royce
|
148
|
-
SCB: Bentley
|
149
|
-
SCC: Lotus Cars
|
150
|
-
SCE: DeLorean Motor Cars N. Ireland (UK)
|
151
|
-
SCF: Aston
|
152
|
-
SDB: Peugeot UK (formerly Talbot)
|
153
|
-
SED: General Motors Luton Plant
|
154
|
-
SEY: LDV
|
155
|
-
SFA: Ford UK
|
156
|
-
SFD: Alexander Dennis UK
|
157
|
-
SHH: Honda UK
|
158
|
-
SHS: Honda UK
|
159
|
-
SJN: Nissan UK
|
160
|
-
SKF: Vauxhall
|
161
|
-
SLP: JCB Research UK
|
162
|
-
SMT: Triumph Motorcycles
|
163
|
-
SUF: Fiat Auto Poland
|
164
|
-
SUL: FSC (Poland)
|
165
|
-
SUP: FSO-Daewoo (Poland)
|
166
|
-
SUU: Solaris Bus & Coach (Poland)
|
167
|
-
TCC: Micro Compact Car AG (smart 1998-1999)
|
168
|
-
TDM: QUANTYA Swiss Electric Movement (Switzerland)
|
169
|
-
TK9: SOR buses (Czech Republic)
|
170
|
-
TMA: Hyundai Motor Manufacturing Czech
|
171
|
-
TMB: Škoda (Czech Republic)
|
172
|
-
TMK: Karosa (Czech Republic)
|
173
|
-
TMP: Škoda trolleybuses (Czech Republic)
|
174
|
-
TMT: Tatra (Czech Republic)
|
175
|
-
TM9: Škoda trolleybuses (Czech Republic)
|
176
|
-
TNE: TAZ
|
177
|
-
TN9: Karosa (Czech Republic)
|
178
|
-
TRA: Ikarus Bus
|
179
|
-
TRU: Audi Hungary
|
180
|
-
TSE: Ikarus Egyedi Autobuszgyar, (Hungary)
|
181
|
-
TSM: Suzuki Hungary
|
182
|
-
TW1: Toyota Caetano Portugal
|
183
|
-
TYA: Mitsubishi Trucks Portugal
|
184
|
-
TYB: Mitsubishi Trucks Portugal
|
185
|
-
UU1: Renault Dacia, (Romania)
|
186
|
-
UU3: ARO
|
187
|
-
UU6: Daewoo Romania
|
188
|
-
U5Y: Kia Motors Slovakia
|
189
|
-
U6Y: Kia Motors Slovakia
|
190
|
-
VAG: Magna Steyr Puch
|
191
|
-
VAN: MAN Austria
|
192
|
-
VBK: KTM (Motorcycles)
|
193
|
-
VF1: Renault
|
194
|
-
VF2: Renault
|
195
|
-
VF3: Peugeot
|
196
|
-
VF4: Talbot
|
197
|
-
VF6: Renault (Trucks & Buses)
|
198
|
-
VF7: Citroën
|
199
|
-
VF8: Matra
|
200
|
-
VF9: Bugatti
|
201
|
-
795: Bugatti
|
202
|
-
VG5: MBK (motorcycles)
|
203
|
-
VLU: Scania France
|
204
|
-
VN1: SOVAB (France)
|
205
|
-
VNE: Irisbus (France)
|
206
|
-
VNK: Toyota France
|
207
|
-
VNV: Renault-Nissan
|
208
|
-
VSA: Mercedes-Benz Spain
|
209
|
-
VSE: Suzuki Spain (Santana Motors)
|
210
|
-
VSK: Nissan Spain
|
211
|
-
VSS: SEAT
|
212
|
-
VSX: Opel Spain
|
213
|
-
VS6: Ford Spain
|
214
|
-
VS7: Citroën Spain
|
215
|
-
VS9: Carrocerias Ayats (Spain)
|
216
|
-
VTH: Derbi (motorcycles)
|
217
|
-
VTL: Yamaha Spain (motorcycles)
|
218
|
-
VTT: Suzuki Spain (motorcycles)
|
219
|
-
VV9: TAURO Spain
|
220
|
-
VWA: Nissan Spain
|
221
|
-
VWV: Volkswagen Spain
|
222
|
-
VX1: Zastava / Yugo Serbia
|
223
|
-
WAG: Neoplan
|
224
|
-
WAU: Audi
|
225
|
-
WA1: Audi SUV
|
226
|
-
WBA: BMW
|
227
|
-
WBS: BMW M
|
228
|
-
WBY: BMW
|
229
|
-
WDA: Daimler
|
230
|
-
WDB: Mercedes-Benz
|
231
|
-
WDC: DaimlerChrysler
|
232
|
-
WDD: Mercedes-Benz
|
233
|
-
WDF: Mercedes-Benz (commercial vehicles)
|
234
|
-
WEB: Evobus GmbH (Mercedes-Bus)
|
235
|
-
WJM: Iveco Magirus
|
236
|
-
WF0: Ford Germany
|
237
|
-
WKK: Kässbohrer/Setra
|
238
|
-
WMA: MAN Germany
|
239
|
-
WME: smart
|
240
|
-
WMW: MINI
|
241
|
-
WMX: Mercedes-AMG
|
242
|
-
WP0: Porsche
|
243
|
-
WP1: Porsche SUV
|
244
|
-
W0L: Opel
|
245
|
-
W0V: Opel
|
246
|
-
WUA: quattro GmbH
|
247
|
-
WVG: Volkswagen MPV/SUV
|
248
|
-
WVW: Volkswagen
|
249
|
-
WV1: Volkswagen Commercial Vehicles
|
250
|
-
WV2: Volkswagen Bus/Van
|
251
|
-
WV3: Volkswagen Trucks
|
252
|
-
XLB: Volvo (NedCar)
|
253
|
-
XLE: Scania Netherlands
|
254
|
-
XLR: DAF (trucks)
|
255
|
-
XL9: Spyker
|
256
|
-
363: Spyker
|
257
|
-
XMC: Mitsubishi (NedCar)
|
258
|
-
XTA: Lada/AvtoVAZ (Russia)
|
259
|
-
XTC: KAMAZ (Russia)
|
260
|
-
XTH: GAZ (Russia)
|
261
|
-
XTT: UAZ/Sollers (Russia)
|
262
|
-
XTY: LiAZ (Russia)
|
263
|
-
XUF: General Motors Russia
|
264
|
-
XUU: AvtoTor (Russia, General Motors SKD)
|
265
|
-
XW8: Volkswagen Group Russia
|
266
|
-
XWB: UZ-Daewoo (Uzbekistan)
|
267
|
-
XWE: AvtoTor (Russia, Hyundai-Kia SKD)
|
268
|
-
X1M: PAZ (Russia)
|
269
|
-
X4X: AvtoTor (Russia, BMW SKD)
|
270
|
-
X7L: Renault AvtoFramos (Russia)
|
271
|
-
X7M: Hyundai TagAZ (Russia)
|
272
|
-
YBW: Volkswagen Belgium
|
273
|
-
YB1: Volvo Trucks Belgium
|
274
|
-
YCM: Mazda Belgium
|
275
|
-
YE2: Van Hool (buses)
|
276
|
-
YH2: BRP Finland (Lynx snowmobiles)
|
277
|
-
YK1: Saab-Valmet Finland
|
278
|
-
YS2: Scania AB
|
279
|
-
YS3: Saab
|
280
|
-
YS4: Scania Bus
|
281
|
-
YTN: Saab NEVS
|
282
|
-
YT9: Koenigsegg
|
283
|
-
007: Koenigsegg
|
284
|
-
YT9: Carvia
|
285
|
-
034: Carvia
|
286
|
-
YU7: Husaberg (motorcycles)
|
287
|
-
YV1: Volvo Cars
|
288
|
-
YV4: Volvo Cars
|
289
|
-
YV2: Volvo Trucks
|
290
|
-
YV3: Volvo Buses
|
291
|
-
Y3M: MAZ (Belarus)
|
292
|
-
Y6D: Zaporozhets/AvtoZAZ (Ukraine)
|
293
|
-
ZAA: Autobianchi
|
294
|
-
ZAM: Maserati
|
295
|
-
ZAP: Piaggio/Vespa/Gilera
|
296
|
-
ZAR: Alfa Romeo
|
297
|
-
ZBN: Benelli
|
298
|
-
ZCG: Cagiva SpA / MV Agusta
|
299
|
-
ZCF: Iveco
|
300
|
-
ZDM: Ducati Motor Holdings SpA
|
301
|
-
ZDF: Ferrari Dino
|
302
|
-
ZD0: Yamaha Italy
|
303
|
-
ZD3: Beta Motor
|
304
|
-
ZD4: Aprilia
|
305
|
-
ZFA: Fiat
|
306
|
-
ZFC: Fiat V.I.
|
307
|
-
ZFF: Ferrari
|
308
|
-
ZGU: Moto Guzzi
|
309
|
-
ZHW: Lamborghini
|
310
|
-
ZJM: Malaguti
|
311
|
-
ZJN: Innocenti
|
312
|
-
ZKH: Husqvarna Motorcycles Italy
|
313
|
-
ZLA: Lancia
|
314
|
-
ZOM: OM
|
315
|
-
Z8M: Marussia (Russia)
|
316
|
-
1B3: Dodge
|
317
|
-
1C3: Chrysler
|
318
|
-
1C6: Chrysler
|
319
|
-
1D3: Dodge
|
320
|
-
1FA: Ford Motor Company
|
321
|
-
1FB: Ford Motor Company
|
322
|
-
1FC: Ford Motor Company
|
323
|
-
1FD: Ford Motor Company
|
324
|
-
1FM: Ford Motor Company
|
325
|
-
1FT: Ford Motor Company
|
326
|
-
1FU: Freightliner
|
327
|
-
1FV: Freightliner
|
328
|
-
1F9: FWD Corp.
|
329
|
-
1G: General Motors USA
|
330
|
-
1GC: Chevrolet Truck USA
|
331
|
-
1GT: GMC Truck USA
|
332
|
-
1G1: Chevrolet USA
|
333
|
-
1G2: Pontiac USA
|
334
|
-
1G3: Oldsmobile USA
|
335
|
-
1G4: Buick USA
|
336
|
-
1G6: Cadillac USA
|
337
|
-
1G8: Saturn USA
|
338
|
-
1GM: Pontiac USA
|
339
|
-
1GY: Cadillac USA
|
340
|
-
1H: Honda USA
|
341
|
-
1HD: Harley-Davidson
|
342
|
-
1J4: Jeep
|
343
|
-
1L: Lincoln USA
|
344
|
-
1ME: Mercury USA
|
345
|
-
1M1: Mack Truck USA
|
346
|
-
1M2: Mack Truck USA
|
347
|
-
1M3: Mack Truck USA
|
348
|
-
1M4: Mack Truck USA
|
349
|
-
1M9: Mynatt Truck & Equipment
|
350
|
-
1N: Nissan USA
|
351
|
-
1NX: NUMMI USA
|
352
|
-
1P3: Plymouth USA
|
353
|
-
1R9: Roadrunner Hay Squeeze USA
|
354
|
-
1VW: Volkswagen USA
|
355
|
-
1XK: Kenworth USA
|
356
|
-
1XP: Peterbilt USA
|
357
|
-
1YV: Mazda USA (AutoAlliance International)
|
358
|
-
1ZV: Ford (AutoAlliance International)
|
359
|
-
2A4: Chrysler Canada
|
360
|
-
2BP: Bombardier Recreational Products
|
361
|
-
2B3: Dodge Canada
|
362
|
-
2B7: Dodge Canada
|
363
|
-
2C3: Chrysler Canada
|
364
|
-
2CN: CAMI
|
365
|
-
2D3: Dodge Canada
|
366
|
-
2FA: Ford Motor Company Canada
|
367
|
-
2FB: Ford Motor Company Canada
|
368
|
-
2FC: Ford Motor Company Canada
|
369
|
-
2FM: Ford Motor Company Canada
|
370
|
-
2FT: Ford Motor Company Canada
|
371
|
-
2FU: Freightliner
|
372
|
-
2FV: Freightliner
|
373
|
-
2FZ: Sterling
|
374
|
-
2G: General Motors Canada
|
375
|
-
2G1: Chevrolet Canada
|
376
|
-
2G2: Pontiac Canada
|
377
|
-
2G3: Oldsmobile Canada
|
378
|
-
2G4: Buick Canada
|
379
|
-
2HG: Honda Canada
|
380
|
-
2HK: Honda Canada
|
381
|
-
2HJ: Honda Canada
|
382
|
-
2HM: Hyundai Canada
|
383
|
-
2M: Mercury
|
384
|
-
2NV: Nova Bus Canada
|
385
|
-
2P3: Plymouth Canada
|
386
|
-
2T: Toyota Canada
|
387
|
-
2V4: Volkswagen Canada
|
388
|
-
2V8: Volkswagen Canada
|
389
|
-
2WK: Western Star
|
390
|
-
2WL: Western Star
|
391
|
-
2WM: Western Star
|
392
|
-
3C4: Chrysler Mexico
|
393
|
-
3D3: Dodge Mexico
|
394
|
-
3FA: Ford Motor Company Mexico
|
395
|
-
3FE: Ford Motor Company Mexico
|
396
|
-
3G: General Motors Mexico
|
397
|
-
3H: Honda Mexico
|
398
|
-
3JB: BRP Mexico (all-terrain vehicles)
|
399
|
-
3MD: Mazda Mexico
|
400
|
-
3MZ: Mazda Mexico
|
401
|
-
3N: Nissan Mexico
|
402
|
-
3P3: Plymouth Mexico
|
403
|
-
3VW: Volkswagen Mexico
|
404
|
-
4F: Mazda USA
|
405
|
-
4JG: Mercedes-Benz USA
|
406
|
-
4M: Mercury
|
407
|
-
4RK: Nova Bus USA
|
408
|
-
4S: Subaru-Isuzu Automotive
|
409
|
-
4T: Toyota
|
410
|
-
4T9: Lumen Motors
|
411
|
-
4UF: Arctic Cat Inc.
|
412
|
-
4US: BMW USA
|
413
|
-
4UZ: Frt-Thomas Bus
|
414
|
-
4V1: Volvo
|
415
|
-
4V2: Volvo
|
416
|
-
4V3: Volvo
|
417
|
-
4V4: Volvo
|
418
|
-
4V5: Volvo
|
419
|
-
4V6: Volvo
|
420
|
-
4VL: Volvo
|
421
|
-
4VM: Volvo
|
422
|
-
4VZ: Volvo
|
423
|
-
538: Zero Motorcycles (USA)
|
424
|
-
5F: Honda USA-Alabama
|
425
|
-
5L: Lincoln
|
426
|
-
5N1: Nissan USA
|
427
|
-
5NP: Hyundai USA
|
428
|
-
5T: Toyota USA - trucks
|
429
|
-
5YJ: Tesla Motors
|
430
|
-
6AB: MAN Australia
|
431
|
-
6F4: Nissan Motor Company Australia
|
432
|
-
6F5: Kenworth Australia
|
433
|
-
6FP: Ford Motor Company Australia
|
434
|
-
6G1: General Motors-Holden (post Nov 2002)
|
435
|
-
6G2: Pontiac Australia (GTO & G8)
|
436
|
-
6H8: General Motors-Holden (pre Nov 2002)
|
437
|
-
6MM: Mitsubishi Motors Australia
|
438
|
-
6T1: Toyota Motor Corporation Australia
|
439
|
-
6U9: Privately Imported car in Australia
|
440
|
-
8AD: Peugeot Argentina
|
441
|
-
8AF: Ford Motor Company Argentina
|
442
|
-
8AG: Chevrolet Argentina
|
443
|
-
8AJ: Toyota Argentina
|
444
|
-
8AK: Suzuki Argentina
|
445
|
-
8AP: Fiat Argentina
|
446
|
-
8AW: Volkswagen Argentina
|
447
|
-
8A1: Renault Argentina
|
448
|
-
8GD: Peugeot Chile
|
449
|
-
8GG: Chevrolet Chile
|
450
|
-
935: Citroën Brazil
|
451
|
-
936: Peugeot Brazil
|
452
|
-
93H: Honda Brazil
|
453
|
-
93R: Toyota Brazil
|
454
|
-
93U: Audi Brazil
|
455
|
-
93V: Audi Brazil
|
456
|
-
93X: Mitsubishi Motors Brazil
|
457
|
-
93Y: Renault Brazil
|
458
|
-
94D: Nissan Brazil
|
459
|
-
9BD: Fiat Brazil
|
460
|
-
9BF: Ford Motor Company Brazil
|
461
|
-
9BG: Chevrolet Brazil
|
462
|
-
9BM: Mercedes-Benz Brazil
|
463
|
-
9BR: Toyota Brazil
|
464
|
-
9BS: Scania Brazil
|
465
|
-
9BW: Volkswagen Brazil
|
466
|
-
9FB: Renault Colombia
|
467
|
-
|
468
|
-
region:
|
469
|
-
'Africa': [A, B, C, D, E, F, G, H]
|
470
|
-
'Asia': [J, K, L, M, N, O, P, Q, R]
|
471
|
-
'Europe': [S, T, U, V, W, X, Y, Z]
|
472
|
-
'North America': ['1', '2', '3', '4', '5']
|
473
|
-
'Oceania': ['6', '7']
|
474
|
-
'South America': ['8', '9', '0']
|