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 相关文章推荐
二行代码解决全部网页木马
Mar 28 Javascript
Ext对基本类型的扩展 ext,extjs,format
Dec 25 Javascript
网站繁简切换的JS遇到页面卡死的解决方法
Mar 12 Javascript
JavaScript截取指定长度字符串点击可以展开全部代码
Dec 04 Javascript
JavaScript必知必会(六) delete in instanceof
Jun 08 Javascript
js在ie下打开对话窗口的方法小结
Oct 24 Javascript
jQuery插件zTree实现获取当前选中节点在同级节点中序号的方法
Mar 08 Javascript
自定义类似于jQuery UI Selectable 的Vue指令v-selectable
Aug 23 jQuery
Three.js 再探 - 写一个微信跳一跳极简版游戏
Jan 04 Javascript
什么时候不能在 Node.js 中使用 Lock Files
Jun 24 Javascript
jquery获取并修改触发事件的DOM元素示例【基于target 属性】
Oct 10 jQuery
vue 实现 rem 布局或vw 布局的方法
Nov 13 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
MySQL修改密码方法总结
2008/03/25 PHP
php中$_SERVER[PHP_SELF] 和 $_SERVER[SCRIPT_NAME]之间的区别
2009/09/05 PHP
非常精妙的PHP递归调用与静态变量使用
2012/12/16 PHP
神盾加密解密教程(一)PHP变量可用字符
2014/05/28 PHP
PHP实现的防止跨站和xss攻击代码【来自阿里云】
2018/01/29 PHP
PHP删除字符串中非字母数字字符方法总结
2019/01/20 PHP
Javascript 篱式条件判断
2008/08/22 Javascript
javascript 操作Word和Excel的实现代码
2009/10/26 Javascript
制作高质量的JQuery Plugin 插件的方法
2010/04/20 Javascript
jquery的extend和fn.extend的使用说明
2011/01/09 Javascript
jQuery实现鼠标滑过点击事件音效试听
2015/08/31 Javascript
JS基于myFocus库实现各种功能的tab选项卡切换效果
2015/09/19 Javascript
使用AJAX实现Web页面进度条的实例分享
2016/05/06 Javascript
JS获取鼠标选中的文字
2016/08/10 Javascript
JS实现图片局部放大或缩小的方法
2016/08/20 Javascript
jQuery层次选择器用法示例
2016/09/09 Javascript
jQuery插件jqGrid动态获取列和列字段的方法
2017/03/03 Javascript
jQuery实现字体颜色渐变效果的方法
2017/03/29 jQuery
详解Vue + Vuex 如何使用 vm.$nextTick
2017/11/20 Javascript
深入学习js函数的隐式参数 arguments 和 this
2019/06/24 Javascript
小程序实现锚点滑动效果
2019/09/23 Javascript
js this 绑定机制深入详解
2020/04/30 Javascript
JavaScript使用setTimeout实现倒计时效果
2021/02/19 Javascript
Python getopt模块处理命令行选项实例
2014/05/13 Python
Python自动化运维_文件内容差异对比分析
2017/12/13 Python
Python学习小技巧总结
2018/06/10 Python
pytorch dataloader 取batch_size时候出现bug的解决方式
2020/02/20 Python
jupyter lab文件导出/下载方式
2020/04/22 Python
python 实现客户端与服务端的通信
2020/12/23 Python
css3实现针线缝合效果(图解步骤)
2013/02/04 HTML / CSS
惊艳的手工时装首饰:Migonne Gavigan
2018/02/23 全球购物
精美的手工家居和生活用品:Nkuku
2019/11/01 全球购物
JSP和EJB可以共享HttpSession么?EJB里面可以改变session里面的内容
2013/06/05 面试题
六年级学生期末评语
2014/12/26 职场文书
六五普法心得体会2016
2016/01/21 职场文书
彩虹社八名人气艺人全新周边限时推出,性转女装男装一次拥有!
2022/04/01 日漫