身份证验证代码之——javascript篇

转载 2007年10月08日 10:47:00
<script language=javascript>
function checkIdcard(idcard){

var area={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:"国外"

var idcard,Y,JYM;
var S,M;
var idcard_array = new Array();
idcard_array 
= idcard.split("");
//地区检验
if(area[parseInt(idcard.substr(0,2))]==nullreturn 4;
//身份号码位数及格式检验
switch(idcard.length){
case 15:
if ( (parseInt(idcard.substr(6,2))+1900% 4 == 0 || ((parseInt(idcard.substr(6,2))+1900% 100 == 0 && (parseInt(idcard.substr(6,2))+1900% 4 == 0 )){
ereg
=/^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$/;//测试出生日期的合法性
else {
ereg
=/^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$/;//测试出生日期的合法性
}
if(ereg.test(idcard)) return 0;
else return 2;
break;
case 18:
//18位身份号码检测
//
出生日期的合法性检查 
//
闰年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))
//
平年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))
if ( parseInt(idcard.substr(6,4)) % 4 == 0 || (parseInt(idcard.substr(6,4)) % 100 == 0 && parseInt(idcard.substr(6,4))%4 == 0 )){
ereg
=/^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$/;//闰年出生日期的合法性正则表达式
else {
ereg
=/^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$/;//平年出生日期的合法性正则表达式
}
if(ereg.test(idcard)){//测试出生日期的合法性
//
计算校验位
= (parseInt(idcard_array[0]) + parseInt(idcard_array[10])) * 7
+ (parseInt(idcard_array[1]) + parseInt(idcard_array[11])) * 9
+ (parseInt(idcard_array[2]) + parseInt(idcard_array[12])) * 10
+ (parseInt(idcard_array[3]) + parseInt(idcard_array[13])) * 5
+ (parseInt(idcard_array[4]) + parseInt(idcard_array[14])) * 8
+ (parseInt(idcard_array[5]) + parseInt(idcard_array[15])) * 4
+ (parseInt(idcard_array[6]) + parseInt(idcard_array[16])) * 2
+ parseInt(idcard_array[7]) * 1 
+ parseInt(idcard_array[8]) * 6
+ parseInt(idcard_array[9]) * 3 ;
= S % 11;
= "F";
JYM 
= "10X98765432";
= JYM.substr(Y,1);//判断校验位
if(M == idcard_array[17]) return 0//检测ID的校验位
else return 3;
}
else return 2;
break;
default:
return 1;
break;
}
}

        
function CheckForm()
        {
        
var Errors=new Array(
"验证通过!",
"身份证号码位数不对!",
"身份证号码出生日期超出范围或含有非法字符!",
"身份证号码校验错误!",
"身份证地区非法!"
);
        
var result=checkIdcard(document.getElementById("txt_sfzmhm").value);
        
if(result!=0)
        {
        alert(Errors[result]);
                document.getElementById(
"txt_sfzmhm").focus();
                
return false;        
        }        
            
if(document.getElementById("txt_djzsxxdz").value=="")
            {
                alert(
'请输入你的登记住所详细地址!');
                document.getElementById(
"txt_djzsxxdz").focus();
                
return false;
            }
            
return true;
        }

//================================================
//
地区选择
function RemoveAllOption(obj)
{
  
var len = obj.length-1;
  
for(var i=len; i>=0; i--)
  {
     obj.options.remove(i);
  }
}
function AddEmptyOption(obj)
{
   obj.options.add(
new Option("",""));
}
function FirstChangeOption1(ele,first,second,field)
{
  RemoveAllOption(second);
  second.options.add(
new Option(first.options[first.selectedIndex].text,"")); 
  
var TempOptionStr;
    
var SkillCode = field.value;
    
var currentValue = first.value;
    
if (currentValue.length >= 2){
        
var arrValue = SkillCode.split(";");
        
for (var i=0;i<arrValue.length;i++){
            
var arrOneValue = arrValue[i].split(",");
            
if (currentValue.substr(0,2== arrOneValue[0].substr(0,2)) {    //查找到合适的项目
             if( arrOneValue[0].length >2 && arrOneValue[0!= currentValue)
             {
                    TempOptionStr
= ' '+arrOneValue[1];
                    second.options.add(
new Option(TempOptionStr,arrOneValue[0]));
             }
            }
        }
    }
   
if (second.options.length <= 1) { 
   second.style.display
='none'; document.getElementById(ele).value = first.value ;
   }
    
else  second.style.display='';  }
function FirstChangeOption2(ele,first,second,third,field)
{
  RemoveAllOption(second);
  second.options.add(
new Option(first.options[first.selectedIndex].text,""));  RemoveAllOption(third);
  AddEmptyOption(third);
  
var TempOptionStr;
    
var SkillCode = field.value;
    
var currentValue = first.value;
    
if (currentValue.length >= 2){
        
var arrValue = SkillCode.split(";");
        
for (var i=0;i<arrValue.length;i++){
            
var arrOneValue = arrValue[i].split(","); 
            
if (currentValue.substr(0,2== arrOneValue[0].substr(0,2)) {    //查找到合适的项目
                var IsZero = true
                
var ssub = arrOneValue[0].substr(4);
                
for(var j=0; j<ssub.length;j++)
                {
                    
if(ssub.substring(j,j+1!= "0")
                    {
                       IsZero 
= false;
                       
break;
                    }
                }
             
if(IsZero && arrOneValue[0]!=currentValue)
             {
                   TempOptionStr
= ' '+arrOneValue[1];
                   second.options.add(
new Option(TempOptionStr,arrOneValue[0]));
             }
            }
        }
    }
document.getElementById(ele).value 
= first.value;

if (second.options.length <= 1) second.style.display='none'else second.style.display='';
if (third.options.length <= 1) third.style.display='none'else third.style.display=''; }
function SecondChangeOption(ele,second,third,field)
{
  RemoveAllOption(third);
  third.options.add(
new Option(second.options[second.selectedIndex].text.replace(' ',''),""));
    
var TempOptionStr;
    
var SkillCode = field.value;
    
var currentValue = second.value;
    
if (currentValue.length!=0){
        
var arrValue = SkillCode.split(";");
        
for (var i=0;i<arrValue.length;i++){
            
var arrOneValue = arrValue[i].split(",");
            
if (arrOneValue[0].length>4 && arrOneValue[0!= currentValue  && currentValue.substring(0,4== arrOneValue[0].substr(0,4)) {    //查找到合适的项目
                TempOptionStr= ' '+arrOneValue[1];
                third.options.add(
new Option(TempOptionStr,arrOneValue[0]));
            }
        }
    }
document.getElementById(ele).value 
= second.value; 

if (third.options.length <= 1) third.style.display='none'else third.style.display=''; }
function ThirdChangeOption(ele,third)
{
   document.getElementById(ele).value 
= third.value ;
  
   
}

        
</script>
 

js实现完美身份证号有效性验证

最近需要对身份证合法性进行验证,实名验证是不指望了,不过原来的验证规则太过简单,只是简单的验证了身份证长度,现在业务需要加强下身份证验证规则,网上找到了不少资料,不过都不合偶的心意,无奈只好直接写一个...
  • zjslqshqz
  • zjslqshqz
  • 2017年06月22日 11:30
  • 657

前端身份证号码校验js代码

今天把项目前端的身份证号码从最初的只是校验长度改为只允许正规的号码,具体内容如下 功能主要校验  年月日 地址  格式  以及最后一位的校验 var code...
  • wmcaogaoben
  • wmcaogaoben
  • 2017年08月31日 12:57
  • 253

Js验证身份证号码 Demo例子里有完整的Js代码

  • 2010年08月08日 18:28
  • 2KB
  • 下载

Javascript验证表单身份证号码的合法性

文章出处: http://dengo.org/archives/941 不少大的游戏注册时都要输入身份证号码,来限制未成年人,配合所谓的反沉迷系统,账号注册环节注重的是快捷,所以身份证验证都不是...
  • thinkscape
  • thinkscape
  • 2013年12月30日 16:50
  • 6758

[js实例] 验证身份证和姓名

js文件部分:var vcity={ 11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古", 21:"辽宁",22:"吉林",23:"黑龙江",31...
  • xjtarzan
  • xjtarzan
  • 2016年05月17日 17:00
  • 1983

js 验证身份证号码正确性

今天找半天js验证身份证的,从网上找了很多,自己也总结了一下,在此记录,以便以后使用查询方便,也供大家参考。 代码如下,可直接用身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最...
  • zl541907196
  • zl541907196
  • 2013年11月21日 21:00
  • 3595

JavaScript前端手机、身份证、银行卡验证代码

jQuery.validator.addMethod("idCardValid", function(value, element) { return this.optional(elemen...
  • YsfCSDN2016
  • YsfCSDN2016
  • 2018年01月07日 11:28
  • 85

JAVA学习代码——利用正则表达式判断手机/邮箱/身份证

来自:http://www.oschina.net/code/snippet_1021818_47946 用于校验用户名、密码、手机号、邮箱和身份证等信息 package com.office...
  • Reserved_person
  • Reserved_person
  • 2016年08月19日 11:02
  • 281

JAVA学习代码——利用正则表达式判断手机/邮箱/身份证

来自:http://www.oschina.net/code/snippet_1021818_47946 用于校验用户名、密码、手机号、邮箱和身份证等信息 [java] vie...
  • zhuzj12345
  • zhuzj12345
  • 2016年10月18日 15:57
  • 117

javascript验证身份证

身份证规则 根据〖中华人民共和国国家标准 GB 11643-1999〗中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。 1.将前面的身份证号码17位...
  • gscienty
  • gscienty
  • 2015年01月30日 14:53
  • 589
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:身份证验证代码之——javascript篇
举报原因:
原因补充:

(最多只允许输入30个字)