java正则校验企业中征码

    延续上一篇,此则文为java版本校验企业中征码.

    校验规则在上一篇中已经提过.所以话不多说,直接上代码.

//校验中征码
    public static boolean checkZZM(String value){
        //先进行正则匹配
        String reg = "^[A-Z0-9]{3}[0-9]{13}$";
        if(!value.matches(reg)){
            return false;
        }
        //取出校验位
        String code = value.substring(14,16);
        //前14位转化为char数组
        char[] idCode = value.substring(0,14).toCharArray();
        //加权因子
        int[] weight_factor = new int[]{1,3,5,7,11,2,13,1,1,17,19,97,23,29};
        int len = idCode.length;
        int num = 0;
        int temp = 0;
        //循环取和
        for(int i = 0; i<len; i++){
            //字母转数字
            if(idCode[i]>='A' && idCode[i]<='Z'){
                temp = (int) idCode[i]-55;
            }else {
                temp = (int)idCode[i]-48;
            }
            //求和
            num = num + temp * weight_factor[i];
        }
        //取余+1
        int resisue = num % 97 + 1;
        if(Integer.parseInt(code)-resisue == 0){
            return true;
        }
        return false;
    }

如有规则不清楚可参考上一篇js校验企业中征码. 原理和js校验一样,只是多做一些变量类型的转换.如果错误或者可以优化的地方,烦请大佬多多指教,谢谢!!!

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值