汽车VIN码校验算法 java版

汽车17 位vin 码校验算法

[1].[文件] VinUtil.java ~ 2KB    下载(2) 跳至 [1]

?
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 kv = new HashMap<>();
 
     public static Map wv = 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 ;
         }
     }
}

你可能感兴趣的:(汽车VIN码校验算法 java版)