带表单的javascript验证身份证号

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带表单的javascript验证身份证号相关的知识,希望对你有一定的参考价值。

我有一段表单代码<form name="form1" method="post" action="">
<label>身份证号
<input type="text" name="textfield">
</label>
<label>
<input type="submit" name="Submit" value="提交">
</label>
</form>
请问怎么用javascript实现对此表单的身份证的验证,最好帮忙把表单也改一下?
最好是那种比较严格的身份证号验证代码,顺便把我的表单也改下,本人刚学比较菜

其实就是加一个JS函数段吧。下面这段JS脚本是我用过的最完善的身份证号的验证程序了,因为只有真正的身份证号才能被通过,你可以试的。直接复制运行。
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>Check card no</title>
<script type='text/javascript'>
/*
Author:yufulong
Blog:http://www.xiaoxiaozi.com
*/
var vcity= 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:"国外"
;

checktheform = function()

var card = document.getElementById('card_no').value;
//是否为空
if(card === '')

alert('请输入身份证号,身份证号不能为空');
document.getElementById('card_no').focus;
return false;

//校验长度,类型
if(isCardNo(card) === false)

alert('您输入的身份证号码不正确,请重新输入');
document.getElementById('card_no').focus;
return false;

//检查省份
if(checkProvince(card) === false)

alert('您输入的身份证号码不正确,请重新输入');
document.getElementById('card_no').focus;
return false;

//校验生日
if(checkBirthday(card) === false)

alert('您输入的身份证号码生日不正确,请重新输入');
document.getElementById('card_no').focus();
return false;

//检验位的检测
if(checkParity(card) === false)

alert('您的身份证校验位不正确,请重新输入');
document.getElementById('card_no').focus();
return false;

alert('OK');
return true;
;

//检查号码是否符合规范,包括长度,类型
isCardNo = function(card)

//身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X
var reg = /(^\d15$)|(^\d17(\d|X)$)/;
if(reg.test(card) === false)

return false;


return true;
;

//取身份证前两位,校验省份
checkProvince = function(card)

var province = card.substr(0,2);
if(vcity[province] == undefined)

return false;

return true;
;

//检查生日是否正确
checkBirthday = function(card)

var len = card.length;
//身份证15位时,次序为省(3位)市(3位)年(2位)月(2位)日(2位)校验位(3位),皆为数字
if(len == '15')

var re_fifteen = /^(\d6)(\d2)(\d2)(\d2)(\d3)$/;
var arr_data = card.match(re_fifteen);
var year = arr_data[2];
var month = arr_data[3];
var day = arr_data[4];
var birthday = new Date('19'+year+'/'+month+'/'+day);
return verifyBirthday('19'+year,month,day,birthday);

//身份证18位时,次序为省(3位)市(3位)年(4位)月(2位)日(2位)校验位(4位),校验位末尾可能为X
if(len == '18')

var re_eighteen = /^(\d6)(\d4)(\d2)(\d2)(\d3)([0-9]|X)$/;
var arr_data = card.match(re_eighteen);
var year = arr_data[2];
var month = arr_data[3];
var day = arr_data[4];
var birthday = new Date(year+'/'+month+'/'+day);
return verifyBirthday(year,month,day,birthday);

return false;
;

//校验日期
verifyBirthday = function(year,month,day,birthday)

var now = new Date();
var now_year = now.getFullYear();
//年月日是否合理
if(birthday.getFullYear() == year && (birthday.getMonth() + 1) == month && birthday.getDate() == day)

//判断年份的范围(3岁到100岁之间)
var time = now_year - year;
if(time >= 3 && time <= 100)

return true;

return false;

return false;
;

//校验位的检测
checkParity = function(card)

//15位转18位
card = changeFivteenToEighteen(card);
var len = card.length;
if(len == '18')

var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
var cardTemp = 0, i, valnum;
for(i = 0; i < 17; i ++)

cardTemp += card.substr(i, 1) * arrInt[i];

valnum = arrCh[cardTemp % 11];
if (valnum == card.substr(17, 1))

return true;

return false;

return false;
;

//15位转18位身份证号
changeFivteenToEighteen = function(card)

if(card.length == '15')

var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
var cardTemp = 0, i;
card = card.substr(0, 6) + '19' + card.substr(6, card.length - 6);
for(i = 0; i < 17; i ++)

cardTemp += card.substr(i, 1) * arrInt[i];

card += arrCh[cardTemp % 11];
return card;

return card;
;

</script>
</head>
<body>
<form name="form1" method="post" action="">
<label>身份证号
<input name='card_no' type='text' id='card_no' onBlur='javascript:checktheform();'/>
</label>
<label>
<input type="submit" name="Submit" value="提交">
</label>
</form></body>
</html>
参考技术A <form name="form1" method="post" action="">
<label>身份证号
<input type="text" name="textfield">
</label>
<label>
<input type="submit" name="Submit" value="提交" onclick="chk()">
</label>
</form>
<script>
function chk()
var textfield = document.all.textfield.value;
if(/[1-9]\d17/.test(textfield))alert('正确');else alert('错误');

</script>
参考技术B <%@ page contentType="text/html; charset=GBK" %>
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
<SCRIPT LANGUAGE="JavaScript">
<!--
function checkIdcard(idcard)
var Errors=new Array(
"验证通过!",
"身份证号码位数不对!",
"身份证号码出生日期超出范围或含有非法字符!",
"身份证号码校验错误!",
"身份证地区非法!"
);
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 retflag=false;
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]519[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]519[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()
if(checkIdcard(document.f1.idcard.value)!="验证通过!")
alert(checkIdcard(document.f1.idcard.value));
return false;
else
alert('验证通过');


</SCRIPT>

</HEAD>

<BODY>
<form action="registerSubmit.jsp" name="f1" method="post">
<input name="idcard" type="idcard" class="input1" value="" onkeyup="if(event.keyCode==32)
alert('请不要输入空格');this.value='';document.form1.Repassword.focus();">
<input name="Submit22" type="button" class="input9" value="确定" onClick="check(this.f1) ">
</form>
</BODY>
</HTML>

用这个吧.
参考技术C 身份证不仅仅是18位数字或者最后一位是X,它们之间还是有关联的。

可以上网找下,应该有专门验证身份证的脚本。

JavaScript 身份证号有效验证详解及实例代码

  JavaScript 身份证号有效验证详解及实例代码

  这篇文章主要介绍了JavaScript 身份证号有效验证详解及实例代码的相关资料,需要的朋友可以参考下
 

JavaScript验证身份证号

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<%@ page language="java" contentType="text/html; charset=GB18030"
  pageEncoding="GB18030"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>身份证验证</title>
<script type="text/javascript">
var arr2=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2];
var arr3=[1,0,‘X‘,9,8,7,6,5,4,3,2];
function checkid(){
  var t=document.getElementById("gettext").value;
  if(t.length==18){
    var arr=t.split(‘‘);
    var s;
    var reg = /^\d+$/;
    var pd=0;
    for(i=0;i<17;i++){
      if(reg.test(arr[i])){
        s=true;
        pd=arr[i]*arr2[i]+pd;
      }else{
        s=false;
        break;
      }
    }
    if(s=true){
      var r=pd%11;
      if(arr[17]==arr3[r]){
        document.getElementById("show").innerHTML="身份证号合法  尾号为:"+arr3[r];
      }else{
        document.getElementById("show").innerHTML="非合法身份证号";
      }
    }
     
  }else{
    document.getElementById("show").innerHTML="非合法身份证号";
  }
}
</script>
</head>
<body >
<input id="gettext" type="text" size="30" onkeyup="checkid()">
<p id="show"></p><br>
</body>
</html>

根据网上的身份证的计算公式写的一个验证身份证号的js

第一步:将身份证号码的第1位数字与7相乘;将身份证号码的第2位数字与9相乘;将身份证号码的第3位数字与10相乘;将身份证号码的第4位数字与5相乘;将身份证号码的第5位数字与8相乘;将身份证号码的第6位数字与4相乘;将身份证号码的第7位数字与2相乘;将身份证号码的第8位数字与1相乘;将身份证号码的第9位数字与6相乘;将身份证号码的第10位数字与3相乘;将身份证号码的第11位数字与7相乘;将身份证号码的第12位数字与9相乘;将身份证号码的第13位数字与10相乘;将身份证号码的第14位数字与5相乘;将身份证号码的第15位数字与8相乘;将身份证号码的第16位数字与4相乘;将身份证号码的第17位数字与2相乘。

第二步:将第一步身份证号码1~17位相乘的结果求和,全部加起来。

第三步:用第二步计算出来的结果除以11,这样就会出现余数为0,余数为1,余数为2,余数为3,余数为4,余数为5,余数为6,余数为7,余数为8,余数为9,余数为10共11种可能性。

第四步:如果余数为0,那对应的最后一位身份证的号码为1;如果余数为1,那对应的最后一位身份证的号码为0;如果余数为2,那对应的最后一位身份证的号码为X;如果余数为3,那对应的最后一位身份证的号码为9;如果余数为4,那对应的最后一位身份证的号码为8;如果余数为5,那对应的最后一位身份证的号码为7;如果余数为6,那对应的最后一位身份证的号码为6;如果余数为7,那对应的最后一位身份证的号码为5;如果余数为8,那对应的最后一位身份证的号码为4;如果余数为9,那对应的最后一位身份证的号码为3;如果余数为10,那对应的最后一位身份证的号码为2。

(转载)http://www.jb51.net/article/95287.htm

以上是关于带表单的javascript验证身份证号的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript 正则表单验证(用户名密码确认密码手机号座机号身份证号)

JavaScript 身份证号有效验证详解及实例代码

jquery的表单验证插件怎么验证身份证号

javascript实现验证身份证号的有效性并提示

正则表达式如何验证身份证号?

JavaScript验证身份证号