• 18位身份证的校验


    今天需要这样的一个判断,于是自己试着写了一下:(其实主要就是判断最后一位)

    package demo.test2;
    
    import java.util.HashMap;
    import java.util.Map;
    
    /**
     * 
     * @author yinbenyang
     *18位身份证的验证
     */
    public class java_7 {
    
        public static void main(String[] args) {
            String myCard = "111111190001019999";
            boolean flag = checkIdCard(myCard);
            System.out.println("flag:"+flag);        
        }
        
        public final static Map<Integer, Character> map = new HashMap<Integer, Character>();
        static{
            map.put(0, '1');
            map.put(1, '0');
            map.put(2, 'X');
            map.put(3, '9');
            map.put(4, '8');
            map.put(5, '7');
            map.put(6, '6');
            map.put(7, '5');
            map.put(8, '4');
            map.put(9, '3');
            map.put(10, '2');
        }
        
        public static boolean checkIdCard(String IdCard) {
            if(IdCard==null||IdCard.length()!=18){
                return false;
            }
            int wi[] = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
            int sum = 0;
            for(int i = 0 ; i<wi.length ; i++){
                sum+= wi[i]*(Integer.parseInt(""+IdCard.charAt(i)));
            }
            return map.get(sum%11)==IdCard.charAt(17);
        }
        
    }

     javascript版本:

    function isIdCardNo(num) 
    {
        try{
            var factorArr = new Array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1);
            var error;
            var varArray = new Array();
            var intValue;
            var lngProduct = 0;
            var intCheckDigit;
            var intStrLen = num.length;
            var idNumber = num;    
            // initialize
            if ((intStrLen != 15) && (intStrLen != 18)) {
                //error = "输入身份证号码长度不对!";
                //alert(error);
                //frmAddUser.txtIDCard.focus();
                return false;
            }    
            // check and set value
            for(i=0;i<intStrLen;i++) {
                varArray[i] = idNumber.charAt(i);
                if ((varArray[i] < '0' || varArray[i] > '9') && (i != 17)) {
                    //error = "错误的身份证号码!.";
                    //alert(error);
                    //frmAddUser.txtIDCard.focus();
                    return false;
                } else if (i < 17) {
                    varArray[i] = varArray[i]*factorArr[i];
                }
            }
            if (intStrLen == 18) {
                //check date
                var date8 = idNumber.substring(6,14);
                if (checkDate(date8) == false) {
                    //error = "身份证中日期信息不正确!.";
                    //alert(error);
                    return false;
                }        
                // calculate the sum of the products
                for(i=0;i<17;i++) {
                    lngProduct = lngProduct + varArray[i];
                }        
                // calculate the check digit
                intCheckDigit = 12 - lngProduct % 11;
                switch (intCheckDigit) {
                    case 10:
                        intCheckDigit = 'X';
                        break;
                    case 11:
                        intCheckDigit = 0;
                        break;
                    case 12:
                        intCheckDigit = 1;
                        break;
                }        
                // check last digit
                if (varArray[17].toUpperCase() != intCheckDigit) {
                    //error = "身份证效验位错误!...正确为: " + intCheckDigit + ".";
                    //alert(error);
                    return false;
                }
            } 
            else{        //length is 15
                //check date
                var date6 = idNumber.substring(6,12);
                if (checkDate(date6) == false) {
                    //alert("身份证日期信息有误!.");
                    return false;
                }
            }
        }catch(e){
            //alert(e)
        }
        
        //alert ("Correct.");
        return true;
    }
  • 相关阅读:
    UVa 11300 Spreading the Wealth(有钱同使)
    hihoCoder 1385 : A Simple Job(简单工作)
    hihoCoder 1383 : The Book List(书目表)
    HDU 5724 Chess(国际象棋)
    Sobytiynyy Proyekt Casino Gym
    Course recommendation Gym
    Poor Folk Gym
    How far away? (HDU
    BAPC 2016 ----Brexit (BFS + vector)
    Simpsons’ Hidden Talents(扩展KMP)
  • 原文地址:https://www.cnblogs.com/yby-blogs/p/4063509.html
Copyright © 2020-2023  润新知