js判断15位或者18位的身份证是否标准(带性别)

<script language="javascript">


var powers=new Array("7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2");
var parityBit=new Array("1","0","X","9","8","7","6","5","4","3","2");


var sex="male";


function validId(obj){
alert("123");
    var _id=obj.value;


    if(_id=="")return;
    var _valid=false;
    if(_id.length==15){


        _valid=validId15(_id);


    }else if(_id.length==18){


        _valid=validId18(_id);


    }


    if(!_valid){


        alert("身份证号码有误,请检查!");


        obj.focus();


        return;


    }


    //设置性别


    var sexSel=document.getElementById("sex");


    var options=sexSel.options;


    for(var i=0;i<options.length;i++){


        if(options[i].value==sex){


            options[i].selected=true;


            break;


        }


    }
alert("输入正确");


}  


//18位的身份证号码验证


function validId18(_id){


    _id=_id+"";


    var _num=_id.substr(0,17);


    var _parityBit=_id.substr(17);


    var _power=0;


    for(var i=0;i< 17;i++){


        //校验每一位号码的合法性


        if(_num.charAt(i)<'0'||_num.charAt(i)>'9'){


            return false;


            break;


        }else{


            //加权


            _power+=parseInt(_num.charAt(i))*parseInt(powers[i]);


            //设置性别


            if(i==16&&parseInt(_num.charAt(i))%2==0){


                sex="female";


            }else{


                sex="male";


            }


        }


    }


    //取模


    var mod=parseInt(_power)%11;


    if(parityBit[mod]==_parityBit){


        return true;


    }


    return false;


}


//15位身份证校验


function validId15(_id){


    _id=_id+"";


    for(var i=0;i<_id.length;i++){


        //校验每一位身份证号码的合法性


        if(_id.charAt(i)<'0'||_id.charAt(i)>'9'){


            return false;


            break;


        }


    }


    var year=_id.substr(6,2);


    var month=_id.substr(8,2);


    var day=_id.substr(10,2);


    var sexBit=_id.substr(14);


    //校验年份位


    if(year<'01'||year >'90')return false;


    //校验月份


    if(month<'01'||month >'12')return false;


    //校验日


    if(day<'01'||day >'31')return false;


    //设置性别


    if(sexBit%2==0){


        sex="female";


    }else{


        sex="male";


    }


    return true;


}


</script>
<from>
<input type="text" οnblur="validId(this)" maxlength="18" size="18">


<select id="sex">


    <option value="male">男</option>


    <option value="female">女</option>
</select>
<input type="submit" value="提交" />

</from>


单纯的用正则表达式判断

[javascript]  view plain copy print ?
  1. function isCardNo(card)  
  2. {  
  3.    // 身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X  
  4.    var reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;  
  5.    if(reg.test(card) === false)  
  6.    {  
  7.        alert("身份证输入不合法");  
  8.        return  false;  
  9.    }  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值