JavaScript实现身份证验证代码实例


Posted in Javascript onAugust 26, 2019

这篇文章主要介绍了JavaScript实现身法证验证代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

function isIdCardNo(num) {
        num = num.toUpperCase();      //身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X。    
        if (!(/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(num))) {
          //alert('输入的身份证号长度不对,或者号码不符合规定!\n15位号码应全为数字,18位号码末位可以为数字或X。');       
          //alert('身份证号长度不正确或不符合规定!');       
          return false;    
        } 
        //验证前2位,城市符合
        var aCity={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:"国外"};
        if(aCity[parseInt(num.substr(0,2))]==null){
          //alert('身份证号不正确或不符合规定!');
          return false;
        }
        //alert('城市:'+aCity[parseInt(num.substr(0,2))]);
        
        //下面分别分析出生日期和校验位
        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('身份证号的出生日期不对!');      
            return false;
          } 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 true;
          }
        }
        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('身份证号的出生日期不对!');
            return false;
          }
          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);
              //alert('18位身份证号的校验码不正确!');
              return false;
            }
            return true;
          }
        } 
        return false;
      };

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
用js重建星际争霸
Dec 22 Javascript
javascript 时间比较实现代码
Oct 28 Javascript
Yii-自定义删除确认弹框(zyd)jquery实现代码
Mar 04 Javascript
javascript间隔刷新的简单实例
Nov 14 Javascript
js重写alert控件(适合学习js的新手朋友)
Aug 24 Javascript
Javascript基于对象三大特性(封装性、继承性、多态性)
Jan 04 Javascript
JS实现去除数组中重复json的方法示例
Dec 21 Javascript
Vue+mui实现图片的本地缓存示例代码
May 24 Javascript
webpack 从指定入口文件中提取公共文件的方法
Nov 13 Javascript
vue-router实现嵌套路由的讲解
Jan 19 Javascript
layer.open的自适应及居中及子页面标题的修改方法
Sep 05 Javascript
vue.js Router中嵌套路由的实用示例
Jun 27 Vue.js
基于vue、react实现倒计时效果
Aug 26 #Javascript
tweenjs缓动算法的使用实例分析
Aug 26 #Javascript
JS实现利用闭包判断Dom元素和滚动条的方向示例
Aug 26 #Javascript
JS实现提示效果弹出及延迟隐藏的功能
Aug 26 #Javascript
小程序实现层叠卡片滑动效果
Aug 26 #Javascript
微信小程序 数据缓存实现方法详解
Aug 26 #Javascript
使用typescript构建Vue应用的实现
Aug 26 #Javascript
You might like
天津市收音机工业发展史
2021/03/04 无线电
php学习之数据类型之间的转换代码
2011/05/29 PHP
提高PHP编程效率的方法
2013/11/07 PHP
朋友网关于QQ相关的PHP代码(研究QQ的绝佳资料)
2015/01/26 PHP
在PHP中实现使用Guzzle执行POST和GET请求
2019/10/15 PHP
兼容IE与firefox火狐的回车事件(js与jquery)
2010/10/20 Javascript
Jquery Autocomplete 结合asp.net使用要点
2010/10/29 Javascript
jquery操作checkbox实现全选和取消全选
2014/05/02 Javascript
关于编写性能高效的javascript事件的技术
2014/11/28 Javascript
在父页面得到zTree已选中的节点的方法
2015/02/12 Javascript
JavaScript限定图片显示大小的方法
2015/03/11 Javascript
javascript实现捕捉键盘上按下的键
2015/05/05 Javascript
jQuery提示插件qTip2用法分析(支持ajax及多种样式)
2016/06/08 Javascript
JavaScript代码实现图片循环滚动效果
2020/03/19 Javascript
在Mac下彻底卸载node和npm的方法
2018/05/16 Javascript
浅谈redux以及react-redux简单实现
2018/08/28 Javascript
WebSocket的简单介绍及应用
2019/05/23 Javascript
layui前端时间戳转化实例
2019/11/15 Javascript
JQuery复选框全选效果如何实现
2020/05/08 jQuery
Vue + ts实现轮播插件的示例
2020/11/10 Javascript
原生js实现放大镜组件
2021/01/22 Javascript
[03:13]DOTA2-DPC中国联赛1月25日Recap集锦
2021/03/11 DOTA
在python中利用最小二乘拟合二次抛物线函数的方法
2018/12/29 Python
为什么从Python 3.6开始字典有序并效率更高
2019/07/15 Python
Python使用selenium + headless chrome获取网页内容的方法示例
2019/10/16 Python
妙用itchat! python实现久坐提醒功能
2019/11/25 Python
Python数组并集交集补集代码实例
2020/02/18 Python
python实现飞船游戏的纵向移动
2020/04/24 Python
使用CSS3 制作一个material-design 风格登录界面实例
2016/12/12 HTML / CSS
HTML5 Canvas渐进填充与透明实现图像的Mask效果
2013/07/11 HTML / CSS
日本非常有名的内衣丝袜品牌:GUNZE
2017/01/06 全球购物
什么叫应用程序域?什么是托管代码?什么是强类型系统?什么是装箱和拆箱?什么是重载?CTS、CLS和CLR分别作何解释?
2012/05/23 面试题
介绍一下你对SOA的认识
2016/04/24 面试题
银行职员个人的工作自我评价
2014/02/15 职场文书
小学生2014国庆节演讲稿:祖国在我心中
2014/09/21 职场文书
医务人员医德考评自我评价
2015/03/03 职场文书