检查身份证号码是否正确的函数
<SCRIPT LANGUAGE="JavaScript">
function isIdCardNo(num)
{
  if (isNaN(num)) {alert("输入的不是数字!"); return false;}
  var len = num.length, re; 
  if (len == 15)
    re = new RegExp(/^(\d{6})()?(\d{2})(\d{2})(\d{2})(\d{3})$/);
  else if (len == 18)
    re = new RegExp(/^(\d{6})()?(\d{4})(\d{2})(\d{2})(\d{3})(\d)$/);
  else {alert("输入的数字位数不对!"); return false;}
  var a = num.match(re);
  if (a != null)
  {
    if (len==15)
    {
      var D = new Date("19"+a[3]+"/"+a[4]+"/"+a[5]);
      var B = D.getYear()==a[3]&&(D.getMonth()+1)==a[4]&&D.getDate()==a[5];
    }
    else
    {
      var D = new Date(a[3]+"/"+a[4]+"/"+a[5]);
      var B = D.getFullYear()==a[3]&&(D.getMonth()+1)==a[4]&&D.getDate()==a[5];
    }
    if (!B) {alert("输入的身份证号 "+ a[0] +" 里出生日期不对!"); return false;}
  }
  return true;
}
isIdCardNo("330103780133103");
isIdCardNo("330103780123103");
isIdCardNo("330103197801231030");
</SCRIPT>

解决方案 »

  1.   

    <SCRIPT LANGUAGE="JavaScript">
    <!--
    String.prototype.isIDCard = function() 

     var iSum=0; 
     var info=""; 
     var sId = this; 
     var aCity={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(!/^\d{17}(\d|x)$/i.test(sId)) 
     { 
      return false; 
     } 
     sId=sId.replace(/x$/i,"a"); 
     //非法地区 
     if(aCity[parseInt(sId.substr(0,2))]==null) 
     { 
      return false; 
     } 
     var sBirthday=sId.substr(6,4)+"-"+Number(sId.substr(10,2))+"-"+Number(sId.substr(12,2)); 
     var d=new Date(sBirthday.replace(/-/g,"/")) 
      
     //非法生日 
     if(sBirthday!=(d.getFullYear()+"-"+ (d.getMonth()+1) + "-" + d.getDate())) 
     { 
      return false; 
     } 
     for(var i = 17;i>=0;i--)  
     { 
      iSum += (Math.pow(2,i) % 11) * parseInt(sId.charAt(17 - i),11); 
     } 
     if(iSum%11!=1) 
     { 
      return false; 
     } 
     return true; 
    } alert("2345454564564".isIDCard());
    //-->
    </SCRIPT>//18位的
      

  2.   

    <HTML>
    <HEAD>
    <TITLE> New Document </TITLE>
    <META Http-Equiv="Content-Type" Content="text/html; charset=gb2312">
    </HEAD>
    <SCRIPT LANGUAGE="JavaScript">
    <!--
    function isNoNull(str){
    if(Trim(str)=="") return false;
    return true;
    }
    function Trim(str){
    var i,strlength,t,chartemp,returnstr;
    str=CStr(str);
    strlength=str.length;
    t=str; for(i=0;i<strlength;i++){
    chartemp=str.substring(i,i+1);
    if(chartemp==" "){
    t=str.substring(i+1,strlength);
    }
    else{
    break;
    }
    }
    returnstr=t;

    strlength=t.length;
    for(i=strlength;i>=0;i--){
    chartemp=t.substring(i,i-1);
    if(chartemp==" "){
    returnstr=t.substring(i-1,0);
    }
    else{
    break;
    }
    }
    return (returnstr);
    }function CStr(inp){
    return(""+inp+"");
    }function IsInt(str){
    var i,strlength,tempchar; str=CStr(str);
    if(str=="") return false;
    strlength=str.length;
    for(i=0;i<strlength;i++){
    tempchar=str.substring(i,i+1);
    if(!(tempchar==0||tempchar==1||tempchar==2||tempchar==3||tempchar==4||tempchar==5||tempchar==6||tempchar==7||tempchar==8||tempchar==9)){
    return false;
    }
    }
    return true;
    }function IsDate(datestr){
    var tmpy="";
    var tmpm="";
    var tmpd="";
    var status=0;
    var lthdatestr= datestr.length;

    //分割输入的字符串
    for (i=0;i<lthdatestr;i++){
    if (datestr.charAt(i)== '-'){
    status++;
    }
    if (status>2) return false;
    if ((status==0) && (datestr.charAt(i)!='-')){
    tmpy=tmpy+datestr.charAt(i)
    }
    if ((status==1) && (datestr.charAt(i)!='-')){
    tmpm=tmpm+datestr.charAt(i)
    }
    if ((status==2) && (datestr.charAt(i)!='-')){
    tmpd=tmpd+datestr.charAt(i)
    }
    if ((datestr.charAt(i)!='-') && (IsInt(datestr.charAt(i))==false))
    {
    return false;
    }
    }

    if ((tmpy.length!=4)||(tmpm.length>2)||(tmpd.length>2)) return false;
    var intYear=tmpy
    var intMonth=tmpm
    var intDay=tmpd //过滤错误的日期
    if (!((intMonth>0)&&(intMonth<13)&&(intDay<32)&&(intDay>0))) return false;
    if (!((intYear % 4)==0) && (intDay==2)&&(intDay==29)) return false;
    if ((intMonth<=7)&&((intMonth % 2)==0)&&(intDay>30)) return false;
    if ((intMonth>=8)&&((intMonth % 2)==1)&&(intDay>30)) return false;
    if ((intMonth==2)&&(intDay>29)) return false; return true;
    }function checkSfz(){
    objID=document.frm1.txtDangAn_identity;
    if(isNoNull(objID.value)==false){
    alert("请输入身份证号码");
    objID.focus();
    objID.select();
    return false;
    }
    if(objID.value!=""){
    if(objID.value.length!=15 && objID.value.length!=18){
    alert("请输入正确的身份证位数(15或18位)!");
    objID.focus();
    objID.select();
    return false;
    }
    if(escape(objID.value).indexOf("%u")!=-1){
    alert("请输入正确的身份证号码(数字或英文半角字符)!");
    objID.focus();
    objID.select();
    return false;
    }
    intStrLen=objID.value.length;
    strVal=document.frm1.txtDangAn_identity.value;

    for(i=0;i<intStrLen;i++){
    if(!((strVal.charAt(i)>="A" && strVal.charAt(i)<="Z") || (strVal.charAt(i)>="a" && strVal.charAt(i)<="z") || (strVal.charAt(i)>="0" && strVal.charAt(i)<="9"))){
    alert("请输入正确的身份证号码(数字或英文半角字符)!");
    objID.focus();
    objID.select();
    return false;
    }
    }
    }
    var strsr;
    var sfz=objID.value;

    if(intStrLen==15){//为15为身份证
    strsr="19"+sfz.substring(6,8)+"-"+sfz.substring(8,10)+"-"+sfz.substring(10,12);//strsr为生日
    alert(strsr);
    if(IsDate(strsr)==false){

    alert("您身份证号码填写有误,请自检!");
    document.frm1.txtDangAn_identity.focus();
    return false;
    } } else if(intStrLen==18){//为18为身份证
    strsr=sfz.substring(6,10)+"-"+sfz.substring(10,12)+"-"+sfz.substring(12,14);//strsr为生日 if(IsDate(strsr)==false){
    alert("您身份证号码填写有误,请自检!");
    document.frm1.txtDangAn_identity.focus();
    return false;
    }

    d = new Date();
    if(parseInt(sfz.substring(6,10))<1900 || parseInt(sfz.substring(6,10))>d.getYear()){
    alert("您身份证号码填写有误,请自检!");
    document.all.frm1.txtDangAn_identity.focus();
    document.all.frm1.txtDangAn_identity.select();
    return false;
    }
    }
    return true;
    }//-->
    </SCRIPT>
    <BODY>
    <FORM METHOD=POST ACTION="" name="frm1">
    <INPUT TYPE="text" NAME="txtDangAn_identity" maxlength="18">
    <INPUT TYPE="button" onclick="checkSfz()" value="检验">
    </FORM>
    </BODY>
    </HTML>
      

  3.   

    呵呵 我也跟一帖通过用户输入的身份证号码来获得该用户的生日:)function checkIDCard(s, d, g)
    {
     if (!s) return false;
     d = new Date(d);
     if (!d.getTime()) return false;
     
     var t, r;
     
     t = "" + d.getFullYear() + dblNum(d.getMonth() + 1) + dblNum(d.getDate());
     
     if (g == null || isNaN(g)) return false;
     g = parseInt(g) % 2;
     
     switch (s.length)
     {
      case 8 :
       if (new Date() > d.setFullYear(d.getFullYear() + 19)) return false;
       r = /^[\d]{8}$/;
       if (!r.test(s)) return false;
       if (s != t) return false;   break;
      case 15 :
       r = /^[\d]{15}$/;
       if (!r.test(s)) return false;
       if (s.substr(6, 6) != t.substr(2)) return false;
       if (parseInt(s.charAt(14)) % 2 != g) return false;   break;
      case 18 :
       r = /^(?:[\d]{18}|[\d]{17}X)$/i;
       if (!r.test(s)) return false;
       if (s.substr(6, 8) != t) return false;
       if (parseInt(s.charAt(16)) % 2 != g) return false;
       
       var n = 0;
       var w = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
       var c = new Array("1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2");
       
       for (var i = 0; i < 17; i++)
       {
        n += parseInt(s.charAt(i)) * w[i];
       }
       
       if (s.charAt(17).toUpperCase() != c[n % 11]) return false;   break;
      default :
       return false;
     }
     
     return true;
    }function dblNum(n)
    {
     return parseInt(n) < 10 ? "0" + n : n;
    }
    //下边是在ASP中调用该函数  checkIDCard
    //var cardID = "422324860305482";
    //Response.Write(checkIDCard(cardID, "03/05/1986", 0));