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 相关文章推荐
预加载css或javascript的js代码
Apr 23 Javascript
客户端 使用XML DOM加载json数据的方法
Sep 28 Javascript
jquery dialog open后,服务器端控件失效的快速解决方法
Dec 19 Javascript
ECMAScript5中的对象存取器属性:getter和setter介绍
Dec 08 Javascript
JS+CSS实现经典的左侧竖向滑动菜单效果
Sep 23 Javascript
JS修改地址栏参数实例代码
Jun 14 Javascript
Javascript点击按钮随机改变数字与其颜色
Sep 01 Javascript
微信小程序 122100版本更新问题解决方案
Dec 22 Javascript
angularjs实现的前端分页控件示例
Feb 10 Javascript
JavaScript实现父子dom同时绑定两个点击事件,一个用捕获,一个用冒泡时执行顺序的方法
Mar 30 Javascript
js中let和var定义变量的区别
Feb 08 Javascript
学习JS中的DOM节点以及操作
Apr 30 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
ftp类(example.php)
2006/10/09 PHP
PHP 得到根目录的 __FILE__ 常量
2008/07/23 PHP
PHP采用自定义函数实现遍历目录下所有文件的方法
2014/08/19 PHP
php中mysql连接方式PDO使用详解
2015/02/25 PHP
PHP用mb_string函数库处理与windows相关中文字符及Win环境下开启PHP Mb_String方法
2015/11/11 PHP
学习php设计模式 php实现适配器模式
2015/12/07 PHP
JavaScript初学者需要了解10个小技巧
2010/08/25 Javascript
jquery在Chrome下获取图片的长宽问题解决
2013/03/20 Javascript
jQuery获得document和window对象宽度和高度的方法
2015/03/25 Javascript
Jquery代码实现图片轮播效果(一)
2015/08/12 Javascript
AngularJs 弹出模态框(model)
2016/04/07 Javascript
js简单获取表单中单选按钮值的方法
2016/08/23 Javascript
vue 请求后台数据的实例代码
2017/06/22 Javascript
javascript面向对象程序设计实践常用知识点总结
2019/07/29 Javascript
vue 解决computed修改data数据的问题
2019/11/06 Javascript
webpack优化之代码分割与公共代码提取详解
2019/11/22 Javascript
js HTML DOM EventListener功能与用法实例分析
2020/04/27 Javascript
python解析中国天气网的天气数据
2014/03/21 Python
在RedHat系Linux上部署Python的Celery框架的教程
2015/04/07 Python
在VS Code上搭建Python开发环境的方法
2018/04/06 Python
使用python采集Excel表中某一格数据
2020/05/14 Python
详解CSS3的perspective属性设置3D变换距离的方法
2016/05/23 HTML / CSS
CSS3 对过渡(transition)进行调速以及延时
2020/10/21 HTML / CSS
欧洲高端品牌直销店:Fashionesta
2016/08/31 全球购物
北美大型运动类产品商城:Champs Sports
2017/01/12 全球购物
ruby如何进行集成操作?Ruby能进行多重继承吗?
2013/10/16 面试题
化工工艺专业求职信
2013/09/22 职场文书
同事吵架检讨书
2014/02/05 职场文书
老公给老婆的保证书
2014/04/28 职场文书
投标人廉洁自律承诺书
2014/05/26 职场文书
跟班学习心得体会(共6篇)
2016/01/23 职场文书
如何让vue长列表快速加载
2021/03/29 Vue.js
python如何进行基准测试
2021/04/26 Python
MySQL面试题讲解之如何设置Hash索引
2021/11/01 MySQL
CSS实现九宫格布局(自适应)的示例代码
2022/02/12 HTML / CSS
HTML页面中使两个div并排显示的实现
2022/05/15 HTML / CSS