JS身份证验证 根据身份证计算生日 年龄

function isIdCardNo(str,str2,str3)
{
    var num= document.getElementById(str).value; 
    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;
        }
    }
    //以下取得生日和年齡
    var s1=document.getElementById(str).value; //得到身份證號
    var s2; //返回生日
    var s3;  //返回年齡
    var birYear;
  
    var yy, mm, dd;
   
    if (s1.length == 15) 
    { 
       yy = s1.substr(6,2) 
       mm = s1.substr(8,2)  
       dd = s1.substr(10,2)  
       if (yy < 20)
       {  
        yy = '20' + yy 
        }
        else
        {  
        yy = '19' + yy  } 
        } 
        else if (s1.length == 18) 
        {  
         yy = s1.substr(6, 4)  
         mm = s1.substr(10, 2)  
         dd = s1.substr(12, 2) 
        } 
      
        else 
        {  
         return false 
        } 
        
     var myDate = new Date();
     var nowYear=myDate.getFullYear();
     
     s2=yy + '-' + mm + '-' + dd;
     s3=parseInt(nowYear) -parseInt(yy);
     
    if(s2.length==10)
    {
      document.getElementById(str2).value=s2;
      document.getElementById(str3).value=s3;
    }
   
    return true ;
} 

function GetBirthDay(txtID1, txtID2)
 {
  //如果身份證號碼正確,取出生日放到textbox中
  if(isIdCardNo(txtID1))
  {
    var s1=document.getElementById(txtID1).value; //得到身份證號
    var s2; //返回生日
    var s3;  //返回年齡
    var birYear;
    var myDate = new Date();
    var nowYear=myDate.getFullYear;
    var yy, mm, dd;
   
    if (s1.length == 15) 
    { 
       yy = s.substr(6,2) 
       mm = s.substr(8,2)  
       dd = s.substr(10,2)  
       if (yy < 20)
       {  
        yy = '20' + yy 
        }
        else
        {  
        yy = '19' + yy  } 
        } 
        else if (s1.length == 18) 
        {  
         yy = s.substr(6, 4)  
         mm = s.substr(10, 2)  
         dd = s.substr(12, 2) 
        } 
      
    else 
    {  
     return false 
    } 
    
    s2=yy + '-' + mm + '-' + dd;
    birYear=String(yy)+String(mm)+String(dd);
    
    
    s3=myDate-birYear;
    document.getElementById(txtID2).value;
    return true ;
  }
 }
原文地址:https://www.cnblogs.com/siri/p/2888074.html