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 相关文章推荐
JavaScript的21条基本知识点
Mar 04 Javascript
js中利用tagname和id获取元素的方法
Jan 03 Javascript
AngularJS 遇到的小坑与技巧小结
Jun 07 Javascript
jQuery animate easing使用方法图文详解
Jun 17 Javascript
Javascript动画效果(2)
Oct 11 Javascript
Jquery uploadify 多余的Get请求(404错误)的解决方法
Jan 26 Javascript
JS实现图片预加载之无序预加载功能代码
May 12 Javascript
Angular2使用jQuery的方法教程
May 28 jQuery
Bootstrap treeview实现动态加载数据并添加快捷搜索功能
Jan 07 Javascript
JS返回页面时自动回滚到历史浏览位置
Sep 26 Javascript
浅析微信扫码登录原理(小结)
Oct 29 Javascript
JavaScript实现猜数字游戏
May 20 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
用PHP和ACCESS写聊天室(四)
2006/10/09 PHP
用mysql_fetch_array()获取当前行数据的方法详解
2013/06/05 PHP
Codeigniter生成Excel文档的简单方法
2014/06/12 PHP
event.X和event.clientX的区别分析
2011/10/06 Javascript
jQuery EasyUI API 中文文档 - ValidateBox验证框
2011/10/06 Javascript
深入理解JavaScript系列(9) 根本没有“JSON对象”这回事!
2012/01/15 Javascript
在Iframe中获取父窗口中表单的值(示例代码)
2013/11/22 Javascript
浅析JavaScript中的typeof运算符
2013/11/30 Javascript
jQuery中andSelf()方法用法实例
2015/01/08 Javascript
javascript实现检验的各种规则
2015/07/31 Javascript
jquery选择器简述
2015/08/31 Javascript
Angular.js实现动态加载组件详解
2017/05/28 Javascript
Django中使用jquery的ajax进行数据交互的实例代码
2017/10/15 jQuery
bootstrap treeview 扩展addNode方法动态添加子节点的方法
2017/11/21 Javascript
js中int和string数据类型互相转化实例
2019/01/16 Javascript
微信小程序MUI侧滑导航菜单示例(Popup弹出式,左侧滑动,右侧不动)
2019/01/23 Javascript
ES6 更易于继承的类语法的使用
2019/02/11 Javascript
解决antd datepicker 获取时间默认少8个小时的问题
2020/10/29 Javascript
JavaScript仿京东轮播图效果
2021/02/25 Javascript
python爬虫实现教程转换成 PDF 电子书
2017/02/19 Python
完美解决Pycharm无法导入包的问题 Unresolved reference
2018/05/18 Python
关于Python的一些学习总结
2018/05/25 Python
浅析python 中大括号中括号小括号的区分
2019/07/29 Python
tensorflow保持每次训练结果一致的简单实现
2020/02/17 Python
Python调用SMTP服务自动发送Email的实现步骤
2021/02/07 Python
html5写一个BUI折叠菜单插件的实现方法
2019/09/11 HTML / CSS
音乐系毕业生自荐信
2013/10/27 职场文书
大学生求职自我评价
2014/01/16 职场文书
出纳工作岗位责任制
2014/02/02 职场文书
《黄河颂》教学反思
2014/02/07 职场文书
县政府办公室领导班子对照检查材料思想汇报
2014/09/28 职场文书
就业导师推荐信范文
2015/03/27 职场文书
亮剑观后感600字
2015/06/05 职场文书
教师节晚会主持词
2015/06/30 职场文书
解决pytorch 损失函数中输入输出不匹配的问题
2021/06/05 Python
Nginx反向代理学习实例教程
2021/10/24 Servers