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 页面计时器示例代码
Oct 28 Javascript
原生js ActiveXObject获取execl里面的值
Nov 01 Javascript
Javascript中各种trim的实现详细解析
Dec 10 Javascript
js实现数组转换成json
Jun 26 Javascript
JavaScript实现页面跳转的几种常用方式
Nov 28 Javascript
JavaScript黑洞数字之运算路线查找算法(递归算法)实例
Jan 28 Javascript
深入解析JavaScript框架Backbone.js中的事件机制
Feb 14 Javascript
前端自动化开发之Node.js的环境搭建教程
Apr 01 Javascript
Vue-cli项目部署到Nginx服务器的方法
Nov 01 Javascript
基于JavaScript伪随机正态分布代码实例
Nov 07 Javascript
js实现简单的轮播图效果
Dec 13 Javascript
微信小程序中使用vant框架的具体步骤
Feb 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
重新认识php array_merge函数
2014/08/31 PHP
php reset() 函数指针指向数组中的第一个元素并输出实例代码
2016/11/21 PHP
thinkPHP5.0框架应用请求生命周期分析
2017/03/25 PHP
$.format,jquery.format 使用说明
2011/07/13 Javascript
asp.net 30分钟掌握无刷新 Repeater
2011/09/16 Javascript
jquery操作select详解(取值,设置选中)
2014/02/07 Javascript
js的2种继承方式详解
2014/03/04 Javascript
Jquery对数组的操作技巧整理
2014/03/25 Javascript
jquery实现根据浏览器窗口大小自动缩放图片的方法
2015/07/17 Javascript
利用JQuery写一个简单的异步分页插件
2016/03/07 Javascript
JavaScript 身份证号有效验证详解及实例代码
2016/10/20 Javascript
ionic开发中点击input时键盘自动弹出
2016/12/23 Javascript
使用UrlConnection实现后台模拟http请求的简单实例
2017/01/04 Javascript
JS中解决谷歌浏览器记住密码输入框颜色改变功能
2017/02/13 Javascript
详解本地Node.js服务器作为api服务器的解决办法
2017/02/28 Javascript
详解Vue-cli3 项目在安卓低版本系统和IE上白屏问题解决
2019/04/14 Javascript
nodejs各种姿势断点调试的方法
2020/06/18 NodeJs
Vue3不支持Filters过滤器的问题
2020/09/24 Javascript
[48:21]Mski vs VGJ.S Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
[43:57]Liquid vs Mineski 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
Python 常用的安装Module方式汇总
2017/05/06 Python
python利用标准库如何获取本地IP示例详解
2017/11/01 Python
Python爬虫框架Scrapy基本用法入门教程
2018/07/26 Python
纯用NumPy实现神经网络的示例代码
2018/10/24 Python
Python 转换文本编码实现解析
2019/08/27 Python
python网络爬虫 Scrapy中selenium用法详解
2019/09/28 Python
python如何调用java类
2020/07/05 Python
CSS3 :default伪类选择器使用简介
2018/03/15 HTML / CSS
html5设计原理(推荐收藏)
2014/05/17 HTML / CSS
伦敦时尚生活的缩影:LN-CC
2017/01/24 全球购物
大学生安全责任书
2014/07/25 职场文书
普通党员整改措施
2014/10/24 职场文书
升职自荐信怎么写
2015/03/05 职场文书
大学生个人简历自荐信
2015/03/06 职场文书
建筑工程材料员岗位职责
2015/04/11 职场文书
小区环境卫生倡议书
2015/04/29 职场文书