js身份证验证怎么做

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-06-28
用js表单 验证身份证号合法怎么写


//--身份证号码验证-支持新的带x身份证
function isIdCardNo(num)
{
var factorArr = new Array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1);
var error;
var varArray = new Array();
var intValue;
var lngProduct = 0;
var intCheckDigit;
var intStrLen = num.length;
var idNumber = num;
// initialize
if ((intStrLen != 15) && (intStrLen != 18)) {
//error = "输入身份证号码长度不对!";
//alert(error);
//frmAddUser.txtIDCard.focus();
return false;
}
// check and set value
for(i=0;i<intStrLen;i++) {
varArray[i] = idNumber.charAt(i);
if ((varArray[i] '9') && (i != 17)) {
//error = "错误的身份证号码!.";
//alert(error);
//frmAddUser.txtIDCard.focus();
return false;
} else if (i < 17) {
varArray[i] = varArray[i]*factorArr[i];
}
}
if (intStrLen == 18) {
//check date
var date8 = idNumber.substring(6,14);
if (checkDate(date8) == false) {
//error = "身份证中日期信息不正确!.";
//alert(error);
return false;
}
// calculate the sum of the products
for(i=0;i<17;i++) {
lngProduct = lngProduct + varArray[i];
}
// calculate the check digit
intCheckDigit = 12 - lngProduct % 11;
switch (intCheckDigit) {
case 10:
intCheckDigit = 'X';
break;
case 11:
intCheckDigit = 0;
break;
case 12:
intCheckDigit = 1;
break;
}
// check last digit
if (varArray[17].toUpperCase() != intCheckDigit) {
//error = "身份证效验位错误!...正确为: " + intCheckDigit + ".";
//alert(error);
return false;
}
}
else{ //length is 15
//check date
var date6 = idNumber.substring(6,12);
if (checkDate(date6) == false) {
//alert("身份证日期信息有误!.");
return false;
}
}
//alert ("Correct.");
return true;
}
function checkDate(date)
{
return true;
}
function check()
{
idnum = document.getElementById('idcard').value;
alert(isIdCardNo(idnum));

}

我给你一个很强大的js校验身份证工具方法,其中身份证号是用jquery从网页中某个标签里去取值的,你可以改造成传参也行。
/*****身份证合法性验证*****/
function checkIdCard(){
var idcard = $("#certiNbr").val();
if (idcard.replace(/\s/g, "") == "") {
$("#theAvailabilitySpan").html("请输入证件号码");
$("#checkButton").attr("disabled", "disabled");
return false;
}
var msg = checkId(idcard);
var code = msg.substring(0,1);

if("0" == code){
msg = msg.substring(1,msg.length);
$("#checkButton").attr("disabled", "disabled");
}
$("#theAvailabilitySpan").html(msg);
}
function checkId(idcard){

var Errors=new Array(
"身份证验证通过!",
"0身份证号码位数不对!",
"0身份证号码出生日期超出范围或含有非法字符!",
"0身份证号码校验错误!",
"0身份证地区非法!"
);
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 Errors[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 Errors[0];
else return Errors[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 Errors[0]; //检测ID的校验位
else return Errors[3];
}
else return Errors[2];
break;
default:
return Errors[1];
break;
}

}
function check(obj){

alert(checkIdcard(obj.value));

}



/********************客户信息end********************/

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=gbk" />
</head>
<body>
<script type="text/javascript"> 
//--身份证号码验证-支持新的带x身份证 
function isIdCardNo(num)  

    var factorArr = new Array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1); 
    var error; 
    var varArray = new Array(); 
    var intValue; 
    var lngProduct = 0; 
    var intCheckDigit; 
    var intStrLen = num.length; 
    var idNumber = num;     
    // initialize 
    if ((intStrLen != 15) && (intStrLen != 18)) { 
        //error = "输入身份证号码长度不对!"; 
        //alert(error); 
        //frmAddUser.txtIDCard.focus(); 
        return false; 
    }     
    // check and set value 
    for(i=0;i<intStrLen;i++) { 
        varArray[i] = idNumber.charAt(i); 
        if ((varArray[i] < '0' || varArray[i] > '9') && (i != 17)) { 
            //error = "错误的身份证号码!."; 
            //alert(error); 
            //frmAddUser.txtIDCard.focus(); 
            return false; 
        } else if (i < 17) { 
            varArray[i] = varArray[i]*factorArr[i]; 
        } 
    } 
    if (intStrLen == 18) { 
        //check date 
        var date8 = idNumber.substring(6,14); 
        if (checkDate(date8) == false) { 
            //error = "身份证中日期信息不正确!."; 
            //alert(error); 
            return false; 
        }         
        // calculate the sum of the products 
        for(i=0;i<17;i++) { 
            lngProduct = lngProduct + varArray[i]; 
        }         
        // calculate the check digit 
        intCheckDigit = 12 - lngProduct % 11; 
        switch (intCheckDigit) { 
            case 10: 
                intCheckDigit = 'X'; 
                break; 
            case 11: 
                intCheckDigit = 0; 
                break; 
            case 12: 
                intCheckDigit = 1; 
                break; 
        }         
        // check last digit 
        if (varArray[17].toUpperCase() != intCheckDigit) { 
            //error = "身份证效验位错误!...正确为: " + intCheckDigit + "."; 
            //alert(error); 
            return false; 
        } 
    }  
    else{        //length is 15 
        //check date 
        var date6 = idNumber.substring(6,12); 
        if (checkDate(date6) == false) { 
            //alert("身份证日期信息有误!."); 
            return false; 
        } 
    } 
    //alert ("Correct."); 
    return true; 
}
function checkDate(date) 

    return true; 
}  
function check()
{
 idnum = document.getElementById('idcard').value;
 alert(isIdCardNo(idnum));
 
}
</script>
<form id="form1" name="form1" method="post" action="">
  <table align="center" width="60%" border="0">
    <tr>
      <td> </td>
      <td> </td>
      <td> </td>
    </tr>
    <tr>
      <td> </td>
      <td> </td>
      <td> </td>
    </tr>
    <tr>
      <td width="40%" valign="top"><div align="right">用户注册</div></td>
      <td width="11%" valign="top"> </td>
      <td width="49%" valign="top"><a href="#">管理员登录</a></td>
    </tr>
    <tr>
      <td> </td>
      <td> </td>
      <td> </td>
    </tr>
    <tr>
      <td colspan="3"><table width="100%" border="0">
        <tr>
          <td valign="top"> </td>
          <td valign="top"> </td>
        </tr>
        <tr>
          <td valign="top"><div align="right">姓    名:</div></td>
          <td valign="top"><label>
            <input type="text" name="textfield" />
          </label></td>
        </tr>
        <tr >
          <td width="421" valign="top"> </td>
          <td width="561" valign="top"> </td>
        </tr>
        <tr>
          <td valign="top"><div align="right">证件号码:
            </div></td>
          <td valign="top"><input type="text" name="idcard" id="idcard"/>
            <label>
            <input type="submit" name="Submit3" value="验证" onClick="check()"/>
            </label></td>
        </tr>
        <tr>
          <td valign="top"> </td>
          <td valign="top"> </td>
        </tr>
        <tr>
          <td valign="top"><div align="right">电话号码:</div></td>
          <td valign="top"><input type="text" name="textfield22" /></td>
        </tr>
        <tr>
          <td valign="top"> </td>
          <td valign="top"> </td>
        </tr>
        <tr>
          <td valign="top"> </td>
          <td valign="top"> </td>
        </tr>
        <tr>
          <td valign="top">
            <div align="right">
              <input type="submit" name="Submit" value="提交" />
              </div></td>
          <td valign="top"><label>
              <input type="reset" name="Submit2" value="重置" />
              </label></td>
        </tr>
      </table></td>
    </tr>
  </table>
</form> 
</body>
</html>


  • js身份证验证

function isCardNo(card)  
{     
    // 身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是    校验位,可能为数字或字符X     
    var reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;     
    if(reg.test(card) === false)     
    {   
        alert("身份证输入不合法"); 
        return  false;   
    } 
}


//身份证正则表达式(15位)
var isIDCard1=/^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$/;
//身份证正则表达式(18位)
var isIDCard2=/^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{4}$/;
var isIDCard3=/^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}x$/;

function isIDCard(str){
  return isIDCard1.test(val) || isIDCard2.test(val) || isIDCard3.test(val);
}

alert(isIDCard("612731199208223333"));//测试,如果是身份证,返回true,否则返回false


若果想跟数据库里面的数据验证的话,就必须用ajax或者后台代码了

你的说清楚你要验证什么啊。

  • js身份证验证怎么做
    答:= 18)) { //error = "输入身份证号码长度不对!"; //alert(error); //frmAddUser.txtIDCard.focus(); return false; } // check and set value for(i=0;
  • JS验证:身份证号码由15位或18位数字组成.
    答:上面的是正确的,因为第一个分支后有$,匹配字符串末尾,^\d{15}$这个就是严格的匹配15位数字。所以你下面一个没有$的话匹配的就是前面是15个数字的字符串,而后面是什么都可以,也就是说可以匹配任何前面是15个数字的字符串。
  • 我要一段验证身份证的js加上表单的写法
    答:验证身份证的核心函数function IDCardRegex(v) { v = SpaceClear(v); if (v.length != 18) { //alert("长度不正确"); return false; } var numrex = /[0-9xX]/g; if (v.replace(numrex, '') != '') { //alert("字符不正确"); return false; ...
  • 身份证验证js
    答:/***身份证合法性验证***/ function checkIdCard(){ var idcard = $("#certiNbr").val();if (idcard.replace(/\s/g, "") == "") { ("#theAvailabilitySpan").html("请输入证件号码");("#checkButton").attr("disabled", "disabled");return false;} var msg = checkId(idcard...
  • 用js表单 验证身份证号合法怎么写
    答://error = "输入身份证号码长度不对!";//alert(error);//frmAddUser.txtIDCard.focus();return false;} // check and set value for(i=0;i<intStrLen;i++) { varArray[i] = idNumber.charAt(i);if ((varArray[i] < '0' || varArray[i] > '9') && (i != 17)) { //...
  • 下载的JS身份证验证代码如何使用?已做好文本表单和按钮.菜鸟求学,帮忙...
    答:把你的JS和表单贴出来,大家帮你修改一下表单文件代码,使它能够正确调用JS。补充:你的表单代码修改为:<FORM action='UserReg.asp' method="post" name="form1" id="input" onSubmit="javascript:return check_null();"> <TR class="tdbg" > <TD>身份证号:</TD> <TD colspan="2"> ...
  • JS验证身份证18位数字有x|X(不要正则表达式方法)
    答:"不是身份证号码"); } else{ alert("是身份证号码") } } else{ if (isNaN(s)){ alert("不是身份证号码"); } else{ alert("是身份证号码") } }}else if(s.length==15 && !isNaN(s)){ alert("是身份证号码")}else{ alert("不是身份证号码");} ...
  • js判断身份证号码是否合法有效全国通用
    答:首先看看身份证是怎么构造的:首先:1)地区代码:表示出生地,上图为北京市朝阳区 2)出生日期:不解释,只要合理就好 3)顺序号:最后一位为奇数表示性别男,偶数性别女 4)校验位:这是系统验证比较关键的一位,由前面17位通过公式计算得出,具体公式在此不做讨论,因为其结果为数字0~9或者字母X 这些...
  • JS验证身份证的正则表达式?
    答:18位身份证:先用这个表达式取出出生年份 \d{6}(\d{4})\d{8} 1就是四位的年份,比如1986 在用这个表达式判断是不是在1900-2000之间 (19\d{2}|2000)15位身份证,这种身份证1900和2000是区分不出来的,这种身份证年份只用后两位表示 先用这个表达式取出出生年份 \d{6}(\d{2})\d{7} 1就...
  • JS中 身份证号验证生日和性别的问题
    答:JS中 身份证号验证生日和性别的问题 5 有三个输入框,要求一个输入身份证号,另外两个同步给出生日和性别。不能用到表单。请大侠给出代码。。。... 有三个输入框,要求一个输入身份证号,另外两个同步给出生日和性别。不能用到表单。请大侠给出代码。。。 展开  我来答 ...