J2EE社区

苟有恒,何必三更起五更眠;
最无益,只怕一日曝十日寒.
posts - 241, comments - 318, trackbacks - 0, articles - 16

身份证验证

Posted on 2010-08-30 17:07 xcp 阅读(330) 评论(0)  编辑  收藏 所属分类: Javascript

一。常用的身份证验证

<script> 
    
function isIdCardNo(num){
        num 
= num.toUpperCase();  
        
//身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X。   
        if (!(/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(num))){ 
             alert('输入的身份证号长度不对,或者号码不符合规定!\n15位号码应全为数字,18位号码末位可以为数字或X。'); 
             
return false
        } 
        
//校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。 
        //下面分别分析出生日期和校验位 
        var len, re; 
        len 
= num.length; 
        
if (len == 15){
            re 
= new RegExp(/^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/); 
            
var arrSplit = num.match(re); 
            
//检查生日日期是否正确 
            var dtmBirth = new Date('19+ arrSplit[2+ '/+ arrSplit[3+ '/+ arrSplit[4]); 
            
var bGoodDay; 
            bGoodDay 
= (dtmBirth.getYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1== Number(arrSplit[3])) && (dtmBirth.getDate() == Number(arrSplit[4])); 
            
if (!bGoodDay){ 
                  alert('输入的身份证号里出生日期不对!');   
                   
return false
            }
else
                
var userBirthDay = String(G('userBirthDay').value);
                String.prototype.replaceAll  
= function(s1,s2){return this.replace(new RegExp(s1,"gm"),s2);}  
                userBirthDay 
= userBirthDay.replaceAll("-","/");
                
var birthDay = new Date(userBirthDay);
                alert(birthDay);
                
                
//将15位身份证转成18位 
                //校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。 
                  var arrInt = new Array(7910584216379105842); 
                   
var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'); 
                   
var nTemp = 0, i;   
                    num 
= num.substr(06+ '19+ num.substr(6, num.length - 6); 
                  
for(i = 0; i < 17; i ++){ 
                    nTemp 
+= num.substr(i, 1* arrInt[i]; 
                   } 
                   num 
+= arrCh[nTemp % 11];   
                
return num;   
            }   
        }
else if(len == 18) { 
            re 
= new RegExp(/^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/); 
            
var arrSplit = num.match(re); 

            
//检查生日日期是否正确 
            var dtmBirth = new Date(arrSplit[2+ "/" + arrSplit[3+ "/" + arrSplit[4]); 
            
var bGoodDay; 
            bGoodDay 
= (dtmBirth.getFullYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1== Number(arrSplit[3])) && (dtmBirth.getDate() == Number(arrSplit[4])); 
            
if (!bGoodDay){ 
                alert(dtmBirth.getYear()); 
                alert(arrSplit[
2]); 
                alert('输入的身份证号里出生日期不对!'); 
                
return false
            }
else
                
//检验18位身份证的校验码是否正确。 
                //校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。 
                var valnum; 
                
var arrInt = new Array(7910584216379105842); 
                
var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'); 
                
var nTemp = 0, i; 
                
for(i = 0; i < 17; i ++){ 
                    nTemp 
+= num.substr(i, 1* arrInt[i]; 
                } 
                valnum 
= arrCh[nTemp % 11]; 
                
if (valnum != num.substr(171)) { 
                    alert('18位身份证的校验码不正确!应该为:' 
+ valnum); 
                    
return false
                } 
                
return num; 
            } 
        } 
        
return false
    }  
</script> 



名称: ♪4C.ESL | .↗Evon
口号: 遇到新问题♪先要寻找一个方案乄而不是创造一个方案こ
mail: 联系我



只有注册用户登录后才能发表评论。


网站导航: