/**
*
* @Title: vinValidate
* @param vin
* @return Integer
* 0 验证通过
* 1 VIN码前三位不可识别
* 2 VIN码格式错误
*/
@Override
public Integer vinValidate(String vin){
logger.info("Info->CommonServiceImpl-->vinValidate|param:vin="+vin);
String vinCode=vin.toUpperCase();
//长度验证
if (vinCode.length() == 17){
//Vin不会存在IOQ三个字母
if (vinCode.indexOf("I") < 0 && vinCode.indexOf("O") < 0 && vinCode.indexOf("Q")<0){
int vinValidate = 0;//验证结果
int validateTotal = 0;//所有位数乘以权重后的和
//最后四位必须是数字
if (StringUtils.isNumeric(vinCode.substring(13, 17))){
//将VIN拆分成17个字母的数组
char[] vinCharArray = vinCode.toCharArray();
for (int i = 0; i < vinCharArray.length; i++){
//校验码计算
if (i == 8){
if ('X' == vinCharArray[i]){
vinValidate = 10;
}else{
try {
vinValidate = Integer.parseInt(vinCharArray[i]+"");
} catch (Exception e) {
logger.error("Exception->CommonServiceImpl-->vinValidate|Exception="+e.getMessage()+"|param:vinCharArray["+i+"]="+vinCharArray[i]+"|vin="+vin);
return 2;
}
}
}else{
try {
validateTotal += getCharValue(vinCharArray[i]+"") * vinIndexWeights[i];
} catch (Exception e) {
e.printStackTrace();
logger.error("Exception->CommonServiceImpl-->vinValidate|Exception="+e.getMessage()+"|param:vinCharArray["+i+"]="+vinCharArray[i]+"|vin="+vin);
return 2;
}
}
}
int vinValidateTmp = 0;
try {
vinValidateTmp = validateTotal % 11;
} catch (Exception e) {
e.printStackTrace();
logger.error("Exception->CommonServiceImpl-->vinValidate|Exception="+e.getMessage()+"|param:validateTotal="+validateTotal+"|vin="+vin);
return 2;
}
//计算规则 第九位的值等于其他16位乘以权重的和对11取余
if ( vinValidateTmp == vinValidate){
return 0;
}else{
return 2;
}
}else {
return 2;
}
}else{
return 2;
}
}else{
return 2;
}
}
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于