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 相关文章推荐
jQuery Autocomplete自动完成插件
Jul 17 Javascript
我的javascript 函数链之演变
Apr 07 Javascript
通过一段代码简单说js中的this的使用
Jul 23 Javascript
jquery教程限制文本框只能输入数字和小数点示例分享
Jan 13 Javascript
详解Javacript和AngularJS中的Promises
Feb 09 Javascript
jQuery插件uploadify实现ajax效果的图片上传
Jun 18 Javascript
javascript中Number的方法小结
Nov 21 Javascript
webpack-dev-server自动更新页面方法
Feb 22 Javascript
vue开发环境配置跨域的方法步骤
Jan 16 Javascript
js中的深浅拷贝问题简析
May 10 Javascript
jquery实现动态改变css样式的方法分析
May 27 jQuery
js实现文章目录索引导航(table of content)
May 10 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写的小东西
2006/12/06 PHP
php自动加载autoload机制示例分享
2014/02/20 PHP
php程序总是提示验证码输入有误解决方案
2015/01/07 PHP
php并发加锁示例
2016/10/17 PHP
PHP实现的文件操作类及文件下载功能示例
2016/12/24 PHP
PHP实现的分页类定义与用法示例
2017/07/05 PHP
JavaScript 事件系统
2010/07/22 Javascript
JavaScript在多浏览器下for循环的使用方法
2012/11/07 Javascript
json数据的列循环示例
2013/09/06 Javascript
js中如何复制一个对象并获取其所有属性和属性对应的值
2013/10/24 Javascript
JQuery获取或设置ckeditor的数据(示例代码)
2013/11/15 Javascript
JQuery为页面Dom元素绑定事件及解除绑定方法
2014/04/23 Javascript
addEventListener 的用法示例介绍
2014/05/07 Javascript
js+html5实现可在手机上玩的拼图游戏
2015/07/17 Javascript
详解JavaScript的另类写法
2016/04/11 Javascript
jquery将标签元素的高设为屏幕的百分比
2017/04/19 jQuery
ES6学习笔记之map、set与数组、对象的对比
2018/03/01 Javascript
JavaScript 中定义函数用 var foo = function () {} 和 function foo()区别介绍
2018/03/01 Javascript
微信小程序有旋转动画效果的音乐组件实例代码
2018/08/22 Javascript
一看就会的vuex实现登录验证(附案例)
2020/01/09 Javascript
JavaScript实现打砖块游戏
2020/02/25 Javascript
echarts浮动显示单位的实现方法示例
2020/12/04 Javascript
学习python之编写简单简单连接数据库并执行查询操作
2016/02/27 Python
Python callable()函数用法实例分析
2018/03/17 Python
python判断一个数是否能被另一个整数整除的实例
2018/12/12 Python
神经网络相关之基础概念的讲解
2018/12/29 Python
wxpython绘制圆角窗体
2019/11/18 Python
货代行业个人求职简历的自我评价
2013/10/22 职场文书
商务英语专业毕业生自荐信
2013/11/05 职场文书
法学毕业生自我鉴定
2013/11/08 职场文书
实习协议书范本
2014/04/22 职场文书
家长会演讲稿
2014/04/26 职场文书
村抢险救灾方案
2014/05/09 职场文书
正风肃纪剖析材料
2014/09/30 职场文书
Golang 如何实现函数的任意类型传参
2021/04/29 Golang
MySQL数据库之内置函数和自定义函数 function
2022/06/16 MySQL