博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
原生JavaScript校验身份证号是否正确
阅读量:6238 次
发布时间:2019-06-22

本文共 4213 字,大约阅读时间需要 14 分钟。

function idcardCheck(num) {            var errstr="";            num=num.toString();            num = num.toUpperCase();            //身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X。               if (! (/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(num))) {                //alert('输入的身份证号长度不对,或者号码不符合规定!\n15位号码应全为数字,18位号码末位可以为数字或X。');                errstr="输入的身份证号长度不对,或者号码不符合规定!";                return {                    result:false,                    str:errstr                };            }            //校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。             //下面分别分析出生日期和校验位             var len, re;            len = num.length;            if (len == 15) {                re = new RegExp(/^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/);                var arrSplit = num.match(re);                //检查生日日期是否正确                 var dtmBirth = new Date('19' + arrSplit[2] + '/' + arrSplit[3] + '/' + arrSplit[4]);                var bGoodDay;                bGoodDay = (dtmBirth.getYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) == Number(arrSplit[3])) && (dtmBirth.getDate() == Number(arrSplit[4]));                if (!bGoodDay) {                    //alert('输入的身份证号里出生日期不对!');                    errstr="输入的身份证号里出生日期不对!";                    return {                        result:false,                        str:errstr                    };                } else {                    //将15位身份证转成18位                     //校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。                     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 nTemp = 0,                    i;                    num = num.substr(0, 6) + '19' + num.substr(6, num.length - 6);                    for (i = 0; i < 17; i++) {                        nTemp += num.substr(i, 1) * arrInt[i];                    }                    num += arrCh[nTemp % 11];                    return {                        result:true,                        str:errstr                    };                }            }            if (len == 18) {                re = new RegExp(/^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/);                var arrSplit = num.match(re);                //检查生日日期是否正确                 var dtmBirth = new Date(arrSplit[2] + "/" + arrSplit[3] + "/" + arrSplit[4]);                var bGoodDay;                bGoodDay = (dtmBirth.getFullYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) == Number(arrSplit[3])) && (dtmBirth.getDate() == Number(arrSplit[4]));                if (!bGoodDay) {                    //alert(dtmBirth.getYear());                     //alert(arrSplit[2]);                     //alert('输入的身份证号里出生日期不对!');                     errstr="输入的身份证号里出生日期不对!";                    return {                        result:false,                        str:errstr                    };                } else {                    //检验18位身份证的校验码是否正确。                     //校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。                     var valnum;                    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 nTemp = 0,                    i;                    for (i = 0; i < 17; i++) {                        nTemp += num.substr(i, 1) * arrInt[i];                    }                    valnum = arrCh[nTemp % 11];                    if (valnum != num.substr(17, 1)) {                        //alert('18位身份证的校验码不正确!应该为:' + valnum);                     //    errstr="18位身份证的校验码不正确!应该为:"+valnum;                        errstr="身份证格式错误,请重新输入!";                        return {                            result:false,                            str:errstr                        };                    }                    return {                        result:true,                        str:errstr                    };                }            }            errstr="输入的身份证号不对";            return {                result:false,                str:errstr            };        }

转载地址:http://rzkia.baihongyu.com/

你可能感兴趣的文章
转 struts2自定义404页面以及返回status code为404的方法
查看>>
Python2 JSON.load成Unicode的坑
查看>>
让Baidu和Google收录你的Hexo博客
查看>>
TypeScript 2019 路线图:更效率,更易用!
查看>>
【微信】第三方登录接口流程
查看>>
纯C实现的词法分析和lex实现的词法分析的对比
查看>>
喧喧发布 2.5.3 版本,主要提升系统稳定性,优化交互体验
查看>>
iOS应用显示一直安装,重启无效,也删除不了问题
查看>>
怎么把荣耀8x的手机备忘录导到电脑里?
查看>>
Elastic Search 新手入门笔记(一)
查看>>
把 Excel 透视表搬到 WEB 上
查看>>
Jenkins配合github实现前端项目自动化构建部署
查看>>
荐书:「时差党」——出国留学不是一件容易的事
查看>>
用户自定义结构数据与VARIANT转换
查看>>
java8-lambda
查看>>
Windows平台JxCore打包
查看>>
[译]ASP.NET Core依赖注入深入讨论
查看>>
设计模式(九)_代理模式
查看>>
02 回归算法 - 线性回归求解 θ(最大似然估计求解)
查看>>
【算法学习】算法的复杂度
查看>>