汽车的vin码 Java、

/**

* @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;
        }
}

猜你喜欢

转载自blog.csdn.net/yz18931904/article/details/80669238