zoukankan      html  css  js  c++  java
  • 验证身份证是否合法算法

    可以通过输入身份证的前17位,然后算出18位,与输入的第18位进行校验,判断输入的是否是合法的身份证“

    package com.edaixi.testjava;
    
    import java.math.MathContext;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    public class TestJavaTool {
    	
    	
    	
    	private final static int[] FACTOR = new int[]{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
        
        /**
         * 计算前17位身份证号乘以系数后的总和
         * @param id17    前17位身份证号
         * @return
         */
        private static int sumFactor(String id17) {
            if(id17==null || id17.trim().equals("")) {
                return -1; //输入的身份证为空
            }
            int len = id17.length();
            if(len!=17) {
                return -3; //输入的身份证号码不为17位
            }
            int sum = 0;
            for(int i=0; i<len; i++) {
                sum += FACTOR[i] * Integer.parseInt(String.valueOf(id17.charAt(i)));
            }
            return sum;
        }
         
        /**
         * 根据前17位身份证号,算出第18位的数字
         * @param id17
         * @return
         */
        public static String getLastNumOfID(String id17) {
            int sum = sumFactor(id17);
            String res = "";
            if(sum==-1) {
                return "输入的身份证为空";
            }else if(sum==-3) {
                return "输入的身份证号码不为17位";
            }else {
                int mod = sum % 11;
                switch(mod) {
                case 0:
                    res = "1";
                    break;
                case 1:
                    res = "0";
                    break;
                case 2:
                    res = "X";
                    break;
                case 3:
                    res = "9";
                    break;
                case 4:
                    res = "8";
                    break;
                case 5:
                    res = "7";
                    break;
                case 6:
                    res = "6";
                    break;
                case 7:
                    res = "5";
                    break;
                case 8:
                    res = "4";
                    break;
                case 9:
                    res = "3";
                    break;
                case 10:
                    res = "2";
                    break;
                default:
                    break;
                }
            }
            return res;
        }
     
        /**
         * 判断输入的身份证是否合法
         * @param idNum 18位的身份证号
         * @return
         */
        public static boolean isCorrectID(String idNum) {
            boolean flag = false;
            if(idNum==null || idNum.trim().length()!=18) {
                return flag;
            }
            String last = getLastNumOfID(idNum.substring(0, idNum.length()-1));
            if(last.equals(String.valueOf(idNum.charAt(idNum.length()-1)))) {
                flag = true;
            }
            return flag;
        }
         
        public static void main(String[] args) {
            System.out.println("身份证最后一位是:"+getLastNumOfID("41270219910105361"));
            System.out.println("身份证是否合法:"+isCorrectID("41270219910105361"));
    
        }
    }
    

      

  • 相关阅读:
    Mysql:用户操作命令
    Cookie和Set-Cookie
    Matcher中appendReplacement()方法与replaceAll()方法的联系
    记录一次mysql执行异常(磁盘空间)
    ehcache简单配置
    md5
    mysql后台运行简单的备份脚本
    shell脚本研习
    SpringBoot根据条件,去注入需要的Bean
    springboot后台跨域设置
  • 原文地址:https://www.cnblogs.com/spring87/p/4770421.html
Copyright © 2011-2022 走看看