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 相关文章推荐
对setInterval在火狐和chrome切换标签产生奇怪的效果之探索,与解决方案!
Oct 29 Javascript
javascript如何动态加载表格与动态添加表格行
Nov 27 Javascript
jQuery中:radio选择器用法实例
Jan 03 Javascript
JavaScript的jQuery库插件的简要开发指南
Aug 12 Javascript
用Vue.js实现监听属性的变化
Nov 17 Javascript
JS实现图片垂直居中显示小结
Dec 13 Javascript
微信小程序 122100版本更新问题解决方案
Dec 22 Javascript
浅谈jQuery操作类数组的工具方法
Dec 23 Javascript
AngularJS框架中的双向数据绑定机制详解【减少需要重复的开发代码量】
Jan 19 Javascript
详解用node.js实现简单的反向代理
Jun 26 Javascript
浅谈js的解析顺序 作用域 严格模式
Oct 23 Javascript
基于JavaScript实现大文件上传后端代码实例
Aug 18 Javascript
基于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
解密ThinkPHP3.1.2版本之独立分组功能应用
2014/06/19 PHP
PHP SplObjectStorage使用实例
2015/05/12 PHP
PHP按指定键值对二维数组进行排序的方法
2015/12/22 PHP
php的扩展写法总结
2019/05/14 PHP
收集的10个免费的jQuery相册
2011/02/26 Javascript
为指定的元素添加遮罩层的示例代码
2014/01/15 Javascript
js身份证判断方法支持15位和18位
2014/03/18 Javascript
jquery 取子节点及当前节点属性值
2014/07/25 Javascript
jquery获取一个元素下面相同子元素的个数代码
2014/07/31 Javascript
jquery实现侧边弹出的垂直导航
2014/12/09 Javascript
js实现的奥运倒计时时钟效果代码
2015/12/09 Javascript
提升jQuery的性能需要做好七件事
2016/01/11 Javascript
jquery插件Jplayer使用方法简析
2016/04/22 Javascript
基于Echarts 3.19 制作常用的图形(非静态)
2016/05/19 Javascript
BootStrap创建响应式导航条实例代码
2016/05/31 Javascript
超全面的javascript中变量命名规则
2017/02/09 Javascript
常用的几个JQuery代码片段
2017/03/13 Javascript
AngularJS实现select的ng-options功能示例
2017/07/12 Javascript
详解webpack自定义loader初探
2018/08/29 Javascript
js实现简单模态框实例
2018/11/16 Javascript
Vue + Elementui实现多标签页共存的方法
2019/06/12 Javascript
详解nginx配置vue h5 history去除#号
2020/11/09 Javascript
使用python检测主机存活端口及检查存活主机
2015/10/12 Python
Python Matplotlib实现三维数据的散点图绘制
2019/03/19 Python
详解Python数据分析--Pandas知识点
2019/03/23 Python
使用Python实现企业微信的自动打卡功能
2019/04/30 Python
python交易记录整合交易类详解
2019/07/03 Python
Python实现投影法分割图像示例(二)
2020/01/17 Python
Html5之svg可缩放矢量图形_动力节点Java学院整理
2017/07/17 HTML / CSS
保加利亚服装和鞋类购物网站:Bibloo.bg
2020/11/08 全球购物
财务出纳员岗位职责
2013/11/26 职场文书
酒店总经理工作职责
2013/12/13 职场文书
网络编辑岗位职责范本
2014/02/10 职场文书
单位委托函范文
2015/01/29 职场文书
毕业设计论文致谢词
2015/05/14 职场文书
人身损害赔偿协议书
2016/03/22 职场文书