JS实现的检验身份证格式并输出出生日期,年龄,性别,出生地示例


Posted in Javascript onMay 17, 2019

本文实例讲述了JS实现的检验身份证格式并输出出生日期,年龄,性别,出生地。分享给大家供大家参考,具体如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>检验身份证格式并输出出生日期,年龄,性别,出生地</title>
</head>
<body>
<script>
  window.onload = function() {
    var txtVal = document.getElementById("txtVal");
    var oBtn = document.getElementById("oBtn");
    //兼容浏览器点击事件
    function myAddEvent(obj, ev, fn) {
      if(obj.attachEvent) {
        obj.attachEvent("on" + ev, fn);
      }
      else {
        obj.addEventListener(ev, fn, false);
      }
    };
    //身份证地区
    var areaID = {
      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: "国外"
    };
    //性别
    var sexMap = {0: "女", 1: "男"};
    /*********************************************
     * 检验身份证格式是否正确
     ********************************************/
    var checkIdCard = function(IDCard) {
      var iSum = 0;
      var info = "";
      if(!/^\d{17}(\d|x)$/i.test(IDCard))
        return {
          status: false,
          message: '你输入的身份证长度或格式错误!'
        };
      IDCard = IDCard.replace(/x$/i, "a");
      if(areaID[parseInt(IDCard.substr(0, 2))] == null)
        return {
          status: false,
          message: '你的身份证地区非法!'
        };
      var sBirthday = IDCard.substr(6, 4) + "-" + Number(IDCard.substr(10, 2)) + "-" + Number(IDCard.substr(12, 2));
      var d = new Date(sBirthday.replace(/-/g, "/"));
      if(sBirthday != (d.getFullYear() + "-" + (d.getMonth() + 1) + "-" + d.getDate()))
        return {
          status: false,
          message: '身份证上的出生日期非法!'
        };
      for(var i = 17; i >= 0; i--)
        iSum += (Math.pow(2, i) % 11) * parseInt(IDCard.charAt(17 - i), 11);
      if(iSum % 11 != 1)
        return {
          status: false,
          message: '你输入的身份证号非法!'
        };
      //aCity[parseInt(sId.substr(0,2))]+","+sBirthday+","+(sId.substr(16,1)%2?"男":"女");//此次还可以判断出输入的身份证号的人性别
      return {
        status: true,
        message: '校验成功!'
      };
    };
    /*********************************************
     * 根据身份证号获取性别
     *********************************************/
    var getSexByIdCard = function(idCard) {
      if(idCard.length == 15) {
        return sexMap[idCard.substring(14, 15) % 2];
      } else if(idCard.length == 18) {
        return sexMap[idCard.substring(14, 17) % 2];
      } else {
        //不是15或者18,null
        return '';
      }
    };
    /*********************************************
     * 根据身份证号获取生日
     *********************************************/
    var getBirthdayByIdCard = function(idCard) {
      var birthStr;
      if(15 == idCard.length) {
        birthStr = idCard.charAt(6) + idCard.charAt(7);
        if(parseInt(birthStr) < 10) {
          birthStr = '20' + birthStr;
        } else {
          birthStr = '19' + birthStr;
        }
        birthStr = birthStr + '-' + idCard.charAt(8) + idCard.charAt(9) + '-' + idCard.charAt(10) + idCard.charAt(11);
      } else if(18 == idCard.length) {
        birthStr = idCard.charAt(6) + idCard.charAt(7) + idCard.charAt(8) + idCard.charAt(9) + '-' + idCard.charAt(10) + idCard.charAt(11) + '-' + idCard.charAt(12) + idCard.charAt(13);
      }
      return birthStr;
    };
    /*********************************************
     * 根据身份证号获取出生地
     *********************************************/
    var getAreaByIdCard = function(idCard) {
      return areaID[parseInt(idCard.substr(0, 2))];
    };
    /*********************************************
     * 根据身份证号获取年龄
     *********************************************/
    var getAgeByIdCard = function(idCard) {
      var birthStr = getBirthdayByIdCard(idCard);
      var r = birthStr.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/);
      if(r == null) return '';
      var d = new Date(r[1], r[3] - 1, r[4]);
      if(d.getFullYear() == r[1] && (d.getMonth() + 1) == r[3] && d.getDate() == r[4]) {
        var Y = new Date().getFullYear();
        return (Y - r[1]);
      } else {
        return '';
      }
    };
    //点击获取校验结果
    myAddEvent(oBtn, "click", function() {
      var card = txtVal.value
      if(checkIdCard(card).status) {
        //校验是否成功
        console.log(checkIdCard(card).message)
        //输出性别
        console.log(getSexByIdCard(card))
        //输出生日
        console.log(getBirthdayByIdCard(card))
        //输出出生地
        console.log(getAreaByIdCard(card))
        //输出年龄
        console.log(getAgeByIdCard(card))
      } else {
        console.log(checkIdCard(card).message)
      }
    });
  }
</script>
<input type="text" value="" id="txtVal">
<input type="button" id="oBtn" value="获取身份证信息">
</body>
</html>

这里使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码,可得如下运行结果:

JS实现的检验身份证格式并输出出生日期,年龄,性别,出生地示例

另外,本站在线工具小程序上也有一款功能更加强大的身份证信息获取工具,感兴趣的朋友可以扫描如下小程序码查看:

JS实现的检验身份证格式并输出出生日期,年龄,性别,出生地示例

更多关于JavaScript相关内容还可查看本站专题:《JavaScript正则表达式技巧大全》、《JavaScript替换操作技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》、《JavaScript中json操作技巧总结》、《JavaScript错误与调试技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
让人期待的2011年度最佳 jQuery 插件分享
Mar 16 Javascript
jquery处理json数据实例分析
Jun 03 Javascript
jQuery实现的在线答题功能
Apr 12 Javascript
JS对字符串编码的几种方式使用指南
May 14 Javascript
Vue2.0 UI框架ElementUI使用方法详解
Apr 14 Javascript
微信小程序 ES6Promise.all批量上传文件实现代码
Apr 14 Javascript
JS实现发送短信验证后按钮倒计时功能(防止刷新倒计时失效)
Jul 07 Javascript
vue实现移动端图片裁剪上传功能
Aug 18 Javascript
微信小程序实现圆形进度条动画
Nov 18 Javascript
详解vue-video-player使用心得(兼容m3u8)
Aug 23 Javascript
使用layer弹窗提交表单时判断表单是否输入为空的例子
Sep 26 Javascript
浅谈Vue2.4.0 $attrs与inheritAttrs的具体使用
Mar 08 Javascript
微信小程序云开发之使用云函数
May 17 #Javascript
jQuery实现的鼠标拖动画矩形框示例【可兼容IE8】
May 17 #jQuery
微信小程序云开发之使用云数据库
May 17 #Javascript
微信小程序云开发之使用云存储
May 17 #Javascript
vue-cli3 配置开发与测试环境详解
May 17 #Javascript
AngularJS实现的鼠标拖动画矩形框示例【可兼容IE8】
May 17 #Javascript
微信小程序如何使用云开发
May 17 #Javascript
You might like
javascript 小型动画组件与实现代码
2010/06/02 PHP
jQuery探测位置的提示弹窗(toolTip box)详细解析
2013/11/14 Javascript
createTextRange()的使用示例含文本框选中部分文字内容
2014/02/24 Javascript
js实现人民币大写金额形式转换
2016/04/27 Javascript
Vue.js使用$.ajax和vue-resource实现OAuth的注册、登录、注销和API调用
2017/05/10 Javascript
详解angularjs 关于ui-router分层使用
2017/06/12 Javascript
解决webpack打包速度慢的解决办法汇总
2017/07/06 Javascript
浅谈React和Redux的连接react-redux
2017/12/04 Javascript
node实现基于token的身份验证
2018/04/09 Javascript
详解基于electron制作一个node压缩图片的桌面应用
2019/01/29 Javascript
Vue对象赋值视图不更新问题及解决方法
2019/06/03 Javascript
ES6 class的应用实例分析
2019/06/27 Javascript
vue 实现Web端的定位功能 获取经纬度
2019/08/08 Javascript
关于layui的动态图标不显示的解决方法
2019/09/04 Javascript
[00:32]2018DOTA2亚洲邀请赛Secret出场
2018/04/03 DOTA
[01:03:54]Liquid vs IG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
[49:59]KG vs Mineski 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
跟老齐学Python之坑爹的字符编码
2014/09/28 Python
Python中的__SLOTS__属性使用示例
2015/02/18 Python
优化Python代码使其加快作用域内的查找
2015/03/30 Python
TF-IDF与余弦相似性的应用(一) 自动提取关键词
2017/12/21 Python
利用 python 对目录下的文件进行过滤删除
2017/12/27 Python
pyqt5 获取显示器的分辨率的方法
2019/06/18 Python
pandas 时间格式转换的实现
2019/07/06 Python
python excel转换csv代码实例
2019/08/26 Python
Python脚本去除文件的只读性操作
2020/03/05 Python
Python如何使用input函数获取输入
2020/08/06 Python
html5中svg canvas和图片之间相互转化思路代码
2014/01/24 HTML / CSS
幼师自荐信
2013/10/26 职场文书
物业管理委托协议(2篇)
2014/09/23 职场文书
商铺租房协议书范本
2014/12/04 职场文书
物流业务员岗位职责
2015/04/03 职场文书
公司辞职信模板
2015/05/13 职场文书
古诗之爱国古诗5首
2019/09/20 职场文书
5种 JavaScript 方式实现数组扁平化
2021/10/05 Javascript
Apache Hudi 加速传统的批处理模式
2022/04/24 Servers