javascript 身份证号验证的问题(需要修改)
发布网友
发布时间:2022-04-13 06:46
我来回答
共1个回答
热心网友
时间:2022-04-13 08:15
这段代码里有几个问题:
1.if (isNaN(document.form1.number.value)) {alert("输入的不是数字!"); return false;}
这句限定了所有输入都必须是数字, 所以要去掉
2.判断日期时,匹配结果并不是存放在a里,即不是用a[3], 而要用RegExp.$3
3.当a==null,也就是不匹配时, 没有作处理, 仍会返回true
也就是说, 并不只是最后一位X的问题.
可以改成下面这样(尽可能地保持原来的代码), 你拿去试试看:
-----------------------------------
function check(){
var len = document.form1.number.value.length, re;
if (len == 15)
re = new RegExp(/^(\d{6})()?(\d{2})(\d{2})(\d{2})(\d{3})$/gi);
else if (len == 18)
re = new RegExp(/^(\d{6})()?(\d{4})(\d{2})(\d{2})(\d{3})(\d|x)$/gi);
else {
alert("输入的数字位数不对!"); return false;
}
var a = document.form1.number.value.match(re);
if (a != null)
{
if (len==15)
{
var D = new Date("19"+RegExp.$3+"/"+RegExp.$4+"/"+RegExp.$5);
var B = D.getYear()==RegExp.$3&&(D.getMonth()+1)==RegExp.$4&&D.getDate()==RegExp.$5;
}
else
{
var D = new Date(RegExp.$3+"/"+RegExp.$4+"/"+RegExp.$5);
var B = D.getFullYear()==RegExp.$3&&(D.getMonth()+1)==RegExp.$4&&D.getDate()==RegExp.$5;
}
if (!B) {alert("输入的身份证号 "+ a[0] +" 里出生日期不对!"); return false;}
}
else
{
return false
}
return true
}
-------------------------
其中 (\d{6})()? 的()?可以不要, 完全是多余的, 如果去掉, 相应把随后的RegExp.$3,RegExp.$4,RegExp.$5分别前移一位,改成RegExp.$2,RegExp.$3,RegExp.$4就可以了.