javascrip验证身份证,获取生日性别

   做前台经常会遇到身份证验证的问题,今天写了一个js验证文件,验证升值、身份证号码,获取性别,生日。后期可能会获取所属地址。


/**
 * 验证身份证
 * @param idcard 身份证号码
 * @return result = {"pass":false,"node":""}
 */
function IDValidate(idcard){
    var result = {"pass":false,"node":""};
    if(!idcard){
        result.node = "身份证号不能为空";
        return result;
    }
    if( !/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[12])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/i.test(idcard) ){
        result.node = "身份证号格式错误";
        return result;
    }
    var city={11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",21:"辽宁",22:"吉林",23:"黑龙江 ",31:"上海",32:"江苏",33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山东",41:"河南",42:"湖北 ",43:"湖南",44:"广东",45:"广西",46:"海南",50:"重庆",51:"四川",52:"贵州",53:"云南",54:"西藏 ",61:"陕西",62:"甘肃",63:"青海",64:"宁夏",65:"新疆",71:"台湾",81:"香港",82:"澳门",91:"国外"};
    if(!city[idcard.substr(0,2)]){
        result.node = "身份证号前两位地址编码错误";
        return result;
    }
    //18位身份证需要验证最后一位校验位
    if(idcard.length == 18){
        idcard = idcard.split('');
        var factor = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 ];//∑(ai×Wi)(mod 11) 加权因子
        var parity = [ 1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2 ];//校验位
        var sum = 0;
        for (var i = 0; i < 17; i++){
            sum += idcard[i] * factor[i];
        }
        if(parity[sum % 11] != idcard[17]){
            result.node = "身份证号末尾校验错误";
            return result;
        }
    }
    result.pass = true;
    result.node = "身份证号验证正确";
    return result;
}
/**
 * 获取性别,生日
 * @param idcard 身份证号码
 * @return info = {"birthdayText":"","birthdayValue":null,"genderText":"","genderValue":null};
 */
function parseID(idcard){
    if( !IDValidate(idcard).pass ){
        return false;
    }
    var info = {"birthdayText":"","birthdayValue":null,"genderText":"","genderValue":null};
    if (15 == idcard.length) { //15位身份证号码
        var year = idcard.charAt(6) + idcard.charAt(7);
        if (parseInt(year) < 10) {
            year = '20' + year;
        }else{
            year = '19' + year;
        }
        info.birthdayText = year + '-' + idcard.substring(8,10)+ '-' + idcard.substring(10,12);
        info.genderText = parseInt(idcard.charAt(14)) % 2 == 0 ? "女" : "男";
    }else if (18 == idcard.length) { //18位身份证号码
        info.birthdayText = idcard.substring(6,10)+"-"+idcard.substring(10,12)+"-"+idcard.substring(12,14);
        info.genderText = parseInt(idcard.charAt(16)) % 2 == 0 ? "女" : "男";
    }
    info.birthdayValue = new Date(info.birthdayText.replace(/-/g,'/')+' 00:00:00');
    info.genderValue = info.genderText == "男" ? 1 : 2;
    return info;
}
/**
 * 验证身份证号码
 * @param idcard 身份证号码
 * @return info = {"birthdayText":"","birthdayValue":null,"genderText":"","genderValue":null};
 */
function checkIdcard(idcard){
    return IDValidate(idcard).pass;
}


你可能感兴趣的:(性别,身份证验证,生日)