zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    [RTT例程练习] 3.1 动态内存管理之rt_malloc和rt_free
    [RTT例程练习] 3.3 静态内存管理,内存池mempool
    [RTT例程练习] 6.2 在 Finsh 中运行自定义函数
    [RTT例程练习] 2.9 事件机制event
    [SCons 有点翻译的scons学习] 3. 生成和使用库
    [RTT例程练习] 3.2 动态内存管理之rt_realloc和free
    vim 启动 python的自动补全
    [RTT例程练习] 6.1 Finsh 的基本使用
    ELF文件重定位
    [RTT例程练习] 4.2 动态定时器
  • 原文地址:https://www.cnblogs.com/yby-blogs/p/4063509.html
Copyright © 2011-2022 走看看