﻿//身份证号码校验,并从中拆分出出生年月日和性别
var year,month,day,birth,sex;

//校验身份证号码
function CheckIDCard(cardNo){
    var error = "";
    if (cardNo.length==0) error = "请输入证件号码!";
    else if (cardNo.length!=15 && cardNo.length!=18) error = "身份证号长度应为15位或18位！";
    else if (cardNo.length==15){
        year = "19" + cardNo.substring(6,8);
        month = parseInt(cardNo.substring(8,10),10);
        day = parseInt(cardNo.substring(10,12),10);
        var realDay = new Date(year, month, 0).getDate();
        if (month>12 || month<=0) error = "身份证号月份有误！";
        else if ( day < 1 || day > realDay) error = "身份证号日期有误！";

        birth = year + "-" + month + "-" + day;
        sex = cardNo.substring(14,15)%2; //1为男，0为女
    }
    else if (cardNo.length==18){
        year = parseInt(cardNo.substring(6,10),10);
        month = parseInt(cardNo.substring(10,12),10);
        day = parseInt(cardNo.substring(12,14),10);
        var realDay = new Date(year, month, 0).getDate();
        
        if (year>2000 || year<1900) error = "身份证号年份有误！";
        else if (month>12 || month<=0) error = "身份证号月份有误！";
        else if ( day < 1 || day > realDay ) error = "身份证号日期有误！";   
        else if (cardNo.charAt(17).toUpperCase()!=GetVerifyBit(cardNo)) error = "身份证校验位错误！";

        birth = year + "-" + month + "-" + day;
        sex = cardNo.substring(16,17)%2; //1为男，0为女
    }
    return error;
}
//15位转18位中,计算校验位即最后一位
function GetVerifyBit(cardNo){
    var result;
    var nNum=eval(cardNo.charAt(0)*7+cardNo.charAt(1)*9+cardNo.charAt(2)*10+cardNo.charAt(3)*5+cardNo.charAt(4)*8+cardNo.charAt(5)*4+cardNo.charAt(6)*2+cardNo.charAt(7)*1+cardNo.charAt(8)*6+cardNo.charAt(9)*3+cardNo.charAt(10)*7+cardNo.charAt(11)*9+cardNo.charAt(12)*10+cardNo.charAt(13)*5+cardNo.charAt(14)*8+cardNo.charAt(15)*4+cardNo.charAt(16)*2);
    nNum=nNum%11;
    switch (nNum) {
       case 0 : result="1"; break;
       case 1 : result="0"; break;
       case 2 : result="X"; break;
       case 3 : result="9"; break;
       case 4 : result="8"; break;
       case 5 : result="7"; break;
       case 6 : result="6"; break;
       case 7 : result="5"; break;
       case 8 : result="4"; break;
       case 9 : result="3"; break;
       case 10 : result="2"; break;
    }
    return result;
}
//15位转18位
function Get18(cardNoCard){
    if (CheckValue(cardNoCard)){
        var cardNo = cardNoCard;
        var cardNo18 = cardNo;
        if (cardNo.length==0){ alert("请输入15位身份证号！"); return false;}
        if (cardNo.length==15){
            if (cardNo.substring(6,8)>20) cardNo18=cardNo.substring(0,6)+"19"+cardNo.substring(6,15);
            else cardNo18=cardNo.substring(0,6)+"20"+cardNo.substring(6,15);
            cardNo18=cardNo18+GetVerifyBit(cardNo18);
        }
        return cardNo18;
    }
    else return false;
}

function getAge(){
    var month=month;
    if (month<10) month = month.substring(1,2);
    return Math.floor((parseInt(year)*12+parseInt(month)-parseInt(year)*12-parseInt(month))/12);
}
//判断是否大龄,男50,女40
function isBigAge(){
    if (parseInt(getAge())>=40 && parseInt(sex)==2) return "1";
    if (parseInt(getAge())>=50 && parseInt(sex)==1) return "1";
    return "0";
}