javascript 身份证号验证的问题(需要修改)

来源:百度知道 编辑:UC知道 时间:2024/05/27 18:54:43
此代码在当页验证,javascript代码,此代码只能验证数字,如果最后一位是X也是错误的,弹出“输入不是数字”。还有身份证号与出生日期(date)和性别(sex)不符怎样验证?关键是从身份证号中提取出中间的几位与出生日期比较,请在此代码是更改,不要另写代码,否则不给分。谢谢!!!
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