Created
May 29, 2018 11:55
-
-
Save Acvrock/7e171bc85b7180ca8c08d36f44217edb to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class VINUtil { | |
/** | |
* 检验车辆识别码工具类 | |
* @param vin | |
* @return | |
*/ | |
public static boolean checkVIN(String vin) { | |
Map<Integer, Integer> vinMapWeighting = null; | |
Map<Character, Integer> vinMapValue = null; | |
vinMapWeighting = new HashMap<Integer, Integer>(); | |
vinMapValue = new HashMap<Character, Integer>(); | |
vinMapWeighting.put(1, 8); | |
vinMapWeighting.put(2, 7); | |
vinMapWeighting.put(3, 6); | |
vinMapWeighting.put(4, 5); | |
vinMapWeighting.put(5, 4); | |
vinMapWeighting.put(6, 3); | |
vinMapWeighting.put(7, 2); | |
vinMapWeighting.put(8, 10); | |
vinMapWeighting.put(9, 0); | |
vinMapWeighting.put(10, 9); | |
vinMapWeighting.put(11, 8); | |
vinMapWeighting.put(12, 7); | |
vinMapWeighting.put(13, 6); | |
vinMapWeighting.put(14, 5); | |
vinMapWeighting.put(15, 4); | |
vinMapWeighting.put(16, 3); | |
vinMapWeighting.put(17, 2); | |
vinMapValue.put('0', 0); | |
vinMapValue.put('1', 1); | |
vinMapValue.put('2', 2); | |
vinMapValue.put('3', 3); | |
vinMapValue.put('4', 4); | |
vinMapValue.put('5', 5); | |
vinMapValue.put('6', 6); | |
vinMapValue.put('7', 7); | |
vinMapValue.put('8', 8); | |
vinMapValue.put('9', 9); | |
vinMapValue.put('A', 1); | |
vinMapValue.put('B', 2); | |
vinMapValue.put('C', 3); | |
vinMapValue.put('D', 4); | |
vinMapValue.put('E', 5); | |
vinMapValue.put('F', 6); | |
vinMapValue.put('G', 7); | |
vinMapValue.put('H', 8); | |
vinMapValue.put('J', 1); | |
vinMapValue.put('K', 2); | |
vinMapValue.put('M', 4); | |
vinMapValue.put('L', 3); | |
vinMapValue.put('N', 5); | |
vinMapValue.put('P', 7); | |
vinMapValue.put('R', 9); | |
vinMapValue.put('S', 2); | |
vinMapValue.put('T', 3); | |
vinMapValue.put('U', 4); | |
vinMapValue.put('V', 5); | |
vinMapValue.put('W', 6); | |
vinMapValue.put('X', 7); | |
vinMapValue.put('Y', 8); | |
vinMapValue.put('Z', 9); | |
boolean reultFlag = false; | |
String uppervin = vin.toUpperCase(); | |
//排除字母O、I | |
if (vin == null || uppervin.indexOf("O") >= 0|| uppervin.indexOf("I") >= 0) { | |
reultFlag = false; | |
} else { | |
//1:长度为17 | |
if (vin.length() == 17) { | |
char[] vinArr = uppervin.toCharArray(); | |
int amount = 0; | |
for (int i = 0; i < vinArr.length; i++) { | |
//VIN码从从第一位开始,码数字的对应值×该位的加权值,计算全部17位的乘积值相加 | |
amount += vinMapValue.get(vinArr[i])*vinMapWeighting.get(i + 1); | |
} | |
//乘积值相加除以11、若余数为10,即为字母X | |
if (amount % 11 == 10) { | |
if (vinArr[8] == 'X') { | |
reultFlag = true; | |
} else { | |
reultFlag = false; | |
} | |
} else { | |
//VIN码从从第一位开始,码数字的对应值×该位的加权值, | |
// 计算全部17位的乘积值相加除以11,所得的余数,即为第九位校验值 | |
if (amount % 11 != vinMapValue.get(vinArr[8])) { | |
reultFlag = false; | |
} else { | |
reultFlag = true; | |
} | |
} | |
} | |
//1:长度不为17 | |
if (!vin.equals("") && vin.length() != 17) { | |
reultFlag = false; | |
} | |
} | |
return reultFlag; | |
} | |
public static void main(String[] args) { | |
boolean lfv2A21K6A3092399 = checkVIN("L1V2A21K6A3092399"); | |
System.out.println(lfv2A21K6A3092399); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment