身份证验证js

Posted

tags:

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

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script language="javascript">
function isCardNo(num)

if (isNaN(num))

alert("输入的不全是数字");
return false;

var len = num.length, re;
if (len == 15)
re = new RegExp(/^(\d6)()?(\d2)(\d2)(\d2)(\d3)$/);
else if (len == 18)
re = new RegExp(/^(\d6)()?(\d4)(\d2)(\d2)(\d3)(\d)$/);
else

alert("输入数字位数不对");
return false;

var a = num.match(re);
if (a != null)

if (len==15)

var D = new Date("19"+a[3]+"/"+a[4]+"/"+a[5]);
var B = D.getYear()==a[3]&&(D.getMonth()+1)==a[4]&&D.getDate()==a[5];

else

var D = new Date(a[3]+"/"+a[4]+"/"+a[5]);
var B = D.getFullYear()==a[3]&&(D.getMonth()+1)==a[4]&&D.getDate()==a[5];

if (!B)

alert("输入身份证号 "+ a[0] +" 里出生日期对");
return false;


return true;


</script>
</head>
<body>
<input type=text id="txt" value="1110120780423003">
<input type=button value="判断身份证号" onClick="javascript:alert(isCardNo(txt.value))">
</body>
</html>

参考技术A 我给你一个很强大的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]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(obj)

alert(checkIdcard(obj.value));



/********************客户信息end********************/本回答被提问者采纳

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

什么?你还不会身份证号码验证?最全的身份证正则验证js

js 精确验证身份证(地址编码出生日期校验位验证)

JS验证身份证的正则表达式?

使用 websockets 和 Nest.js 的 Passport 会话身份验证未进行身份验证

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

js正则验证,邮箱,身份证