搜索吧

首页 » 搜成宝库 » 常用知识 » js身份证验证(正则表达式JS验证)
xiaoyaoyou - 2009-3-3 17:14:36
js身份证验证

<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))]==null) return 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)){//测试出生日期的合法性
//计算校验位
S = (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 ;
Y = S % 11;
M = "F";
JYM = "10X98765432";
M = 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>
1
查看完整版本: js身份证验证(正则表达式JS验证)