18位身份证的校验

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

package demo.test2;

import java.util.HashMap;
import java.util.Map;

/**
 * 
 * @author yinbenyang
 *18位身份证的验证
 */
public class java_7 {

    public static void mainString[] args) {
        String myCard = "111111190001019999";
        boolean flag = checkIdCardmyCard);
        System.out.println"flag:"+flag);        
    }
    
    public final static Map<Integer, Character> map = new HashMap<Integer, Character>);
    static{
        map.put0, '1');
        map.put1, '0');
        map.put2, 'X');
        map.put3, '9');
        map.put4, '8');
        map.put5, '7');
        map.put6, '6');
        map.put7, '5');
        map.put8, '4');
        map.put9, '3');
        map.put10, '2');
    }
    
    public static boolean checkIdCardString IdCard) {
        ifIdCard==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;
        forint i = 0 ; i<wi.length ; i++){
            sum+= wi[i]*Integer.parseInt""+IdCard.charAti)));
        }
        return map.getsum%11)==IdCard.charAt17);
    }
    
}

 javascript版本:

function isIdCardNonum) 
{
    try{
        var factorArr = new Array7,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 = "输入身份证号码长度不对!";
            //alerterror);
            //frmAddUser.txtIDCard.focus);
            return false;
        }    
        // check and set value
        fori=0;i<intStrLen;i++) {
            varArray[i] = idNumber.charAti);
            if varArray[i] < '0' || varArray[i] > '9') && i != 17)) {
                //error = "错误的身份证号码!.";
                //alerterror);
                //frmAddUser.txtIDCard.focus);
                return false;
            } else if i < 17) {
                varArray[i] = varArray[i]*factorArr[i];
            }
        }
        if intStrLen == 18) {
            //check date
            var date8 = idNumber.substring6,14);
            if checkDatedate8) == false) {
                //error = "身份证中日期信息不正确!.";
                //alerterror);
                return false;
            }        
            // calculate the sum of the products
            fori=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 + ".";
                //alerterror);
                return false;
            }
        } 
        else{        //length is 15
            //check date
            var date6 = idNumber.substring6,12);
            if checkDatedate6) == false) {
                //alert"身份证日期信息有误!.");
                return false;
            }
        }
    }catche){
        //alerte)
    }
    
    //alert "Correct.");
    return true;
}

Published by

风君子

独自遨游何稽首 揭天掀地慰生平