汽车17 位vin 码校验算法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
import
java.util.HashMap;
import
java.util.Map;
public
final
class
VinUtil {
public
static
Map
new
HashMap<>();
public
static
Map
new
HashMap<>();
static
{
for
(
int
i =
0
; i <
10
; i++) {
kv.put(String.valueOf(i).charAt(
0
), i);
}
kv.put(
'a'
,
1
);
kv.put(
'b'
,
2
);
kv.put(
'c'
,
3
);
kv.put(
'd'
,
4
);
kv.put(
'e'
,
5
);
kv.put(
'f'
,
6
);
kv.put(
'g'
,
7
);
kv.put(
'h'
,
8
);
kv.put(
'j'
,
1
);
kv.put(
'k'
,
2
);
kv.put(
'l'
,
3
);
kv.put(
'm'
,
4
);
kv.put(
'n'
,
5
);
kv.put(
'p'
,
7
);
kv.put(
'q'
,
8
);
kv.put(
'r'
,
9
);
kv.put(
's'
,
2
);
kv.put(
't'
,
3
);
kv.put(
'u'
,
4
);
kv.put(
'v'
,
5
);
kv.put(
'w'
,
6
);
kv.put(
'x'
,
7
);
kv.put(
'y'
,
8
);
kv.put(
'z'
,
9
);
wv.put(
1
,
8
);
wv.put(
2
,
7
);
wv.put(
3
,
6
);
wv.put(
4
,
5
);
wv.put(
5
,
4
);
wv.put(
6
,
3
);
wv.put(
7
,
2
);
wv.put(
8
,
10
);
wv.put(
10
,
9
);
wv.put(
11
,
8
);
wv.put(
12
,
7
);
wv.put(
13
,
6
);
wv.put(
14
,
5
);
wv.put(
15
,
4
);
wv.put(
16
,
3
);
wv.put(
17
,
2
);
}
public
static
void
main(String[] args) {
System.out.println(isLegal(
"UU6JA69691D713820"
));
System.out.println(isLegal(
"LFV3A21K7D4262398"
));
System.out.println(isLegal(
"LFV3A23C793062656"
));
System.out.println(isLegal(
"LSGDC82C11S10203O"
));
System.out.println(isLegal(
"LSGDC82C11S102030"
));
System.out.println(isLegal(
"LSGUD84X2BE041557"
));
System.out.println(isLegal(
"WDDBF4CB2EJ143048"
));
System.out.println(isLegal(
"WDDBF4CB2EJ143048"
));
}
public
final
static
boolean
isLegal(String vin) {
if
(
null
== vin) {
return
false
;
}
else
if
(vin.trim().length() ==
17
) {
vin = vin.trim().toLowerCase();
char
[] codes = vin.toCharArray();
/**
* if the 9th is not number ,return false
*/
int
resultInCode =
0
;
if
(
"0123456789"
.contains(vin.subSequence(
8
,
9
))) {
resultInCode = Integer
.valueOf(vin.subSequence(
8
,
9
).toString());
}
else
{
return
false
;
}
int
total =
0
;
for
(
int
i =
1
; i < codes.length +
1
; i++) {
char
code = codes[i -
1
];
if
(kv.containsKey(code)) {
if
(
9
== i) {
continue
;
}
else
{
total += kv.get(code) * wv.get(i);
}
}
else
{
return
false
;
}
}
return
resultInCode == total %
11
;
}
else
{
return
false
;
}
}
}
|