javascript 身份证号验证的问题(需要修改)
来源:百度知道 编辑:UC知道 时间:2024/05/27 18:54:43
function check(){
if (isNaN(document.form1.number.value)) {alert("输入的不是数字!"); return false;}
var len = document.form1.number.value.length, re;
if (len == 15)
re = new RegExp(/^(\d{6})()?(\d{2})(\d{2})(\d{2})(\d{3})$/);
else if (len == 18)
re = new RegExp(/^(\d{6})()?(\d{4})(\d{2})(\d{2})(\d{3})(\d)$/);
else {alert("输入的数字位数不对!"); return false;}
var a = document.form1.number.value.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
这段代码里有几个问题:
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