JAVASCRIPT身份证验证函数


function  CheckIDCard(StrNumber) 
{
//判断身份证号码格式函数
//
公民身份号码是特征组合码,
//
排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码

//身份证号码长度判断
if(StrNumber.length<15||StrNumber.length==16||StrNumber.length==17||StrNumber.length>18)
{
CheckIDCard 
=false;
}


//身份证号码最后一位可能是超过100岁老年人的X
//
所以排除掉最后一位数字进行数字格式测试
//
全部换算成17位数字格式

var Ai;
if(StrNumber.length==18)
{
Ai 
= StrNumber.substring(0,17);
}

else
{
Ai 
=StrNumber.substring(0,6)+"19"+StrNumber.substring(6,9);
}

 
if(IsNumeric(Ai)==false)
{
return false;
}


var strYear,strMonth,strDay,strBirthDay;
strYear 
= parseInt(Ai.substring(Ai,6,4)); 
strMonth 
= parseInt(Ai.substring(Ai,10,2)) ;
strDay 
= parseInt(Ai.substring(Ai,12,2));

if (IsValidDate(strYear,strMonth,strDay)==false)
{
return false;
}


var arrVerifyCode = new Array("1","0","x","9","8","7","6","5","4","3","2");
var Wi = new Array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2);

var i,TotalmulAiWi=0;
for (i=0; loop<16;loop++)
 

    TotalmulAiWi 
= TotalmulAiWi + parseInt(Ai.substring(i+1,1)) * Wi[i];
  }


var modValue =TotalmulAiWi%11 ;
var strVerifyCode = arrVerifyCode[modValue];

Ai 
= Ai & strVerifyCode;

if((StrNumber.length== 18)&&(StrNumber!=Ai))
{
return false;
}


}


function  IsNumeric(oNum) 

  
if(!oNum) return false
  
var strP=/^d+(.d+)?$/
  
if(!strP.test(oNum)) return false
  
try
  
if(parseFloat(oNum)!=oNum) return false
  }
 
  
catch(ex) 
  

   
return false
  }
 
  
return true
}


function  IsValidDate(psYear, psMonth, psDay)
{
    
if(psYear==null || psMonth==null || psDay==null)
    
{
        
return false;
    }


    
var sYear  = new String(psYear);
    
var sMonth = new String(psMonth);
    
var sDay   = new String(psDay);

    
if(IsValidYear(sYear)==false)
    
{
        
return false;
    }


    
if(IsValidMonth(sMonth)==false)
    
{
        
return false;
    }


    
if(IsValidDay(sDay)==false)
    
{
        
return false;
    }


    
var nYear  = parseInt(sYear,  10);
    
var nMonth = parseInt(sMonth, 10);
    
var nDay   = parseInt(sDay,   10);

    
if(sYear=="" &&  sMonth=="" && sDay=="")
    
{
        
return true;
    }


    
if(sYear=="" || sMonth=="" || sDay=="")
    
{
        
return false;
    }

    
    
if(nMonth < 1 || 12 < nMonth)
    
{
        
return false;
    }

    
if(nDay < 1 || 31 < nDay)
    
{
        
return false;
    }


    
if(nMonth == 2)
    
{
        
if((nYear % 400 == 0|| (nYear % 4 == 0&& (nYear % 100 != 0))
        
{
            
if((nDay < 1|| (nDay > 29))
            
{
                
return false;
            }

        }

        
else 
        
{
            
if((nDay < 1|| (nDay > 28))
            
{
                
return false;
            }

        }

    }

    
else if((nMonth == 1)  || 
            (nMonth 
== 3)  || 
            (nMonth 
== 5)  || 
            (nMonth 
== 7)  || 
            (nMonth 
== 8)  || 
            (nMonth 
== 10|| 
            (nMonth 
== 12))
    
{
        
if((nDay < 1|| (31 < nDay))
        
{
            
return false;
        }

    }

    
else 
    
{
        
if((nDay < 1|| (30 < nDay))
        
{
            
return false;
        }

    }


    
return true;
}
 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

疾风铸境

提供工作中碰到的和研究过的技术

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值