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 相关文章推荐
Ucren Virtual Desktop V2.0
Nov 07 Javascript
自己的js工具 Event封装
Aug 21 Javascript
jQuery EasyUI API 中文文档 可调整尺寸
Sep 29 Javascript
JS文本框不能输入空格验证方法
Mar 19 Javascript
javascript编写贪吃蛇游戏
Jul 07 Javascript
解析jquery easyui tree异步加载子节点问题
Mar 08 Javascript
VUE利用vuex模拟实现新闻点赞功能实例
Jun 28 Javascript
Angular搜索 过滤 批量删除 添加 表单验证功能集锦(实例代码)
Oct 25 Javascript
深入浅析AngularJs模版与v-bind
Jul 06 Javascript
详解使用React制作一个模态框
Mar 14 Javascript
js页面加载后执行的几种方式小结
Jan 30 Javascript
解决vue打包报错Unexpected token: punc的问题
Oct 24 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数据类型之布尔型的介绍
2013/04/28 PHP
php实现二进制和文本相互转换的方法
2015/04/18 PHP
php生成图片验证码
2015/06/09 PHP
php单例模式的简单实现方法
2016/06/10 PHP
PHPstorm快捷键(分享)
2017/07/17 PHP
Jquery 基础学习笔记
2009/05/29 Javascript
javascript document.execCommand() 常用解析
2009/12/14 Javascript
我遇到的参数传递中 双引号单引号嵌套问题
2010/02/11 Javascript
jQuery.prototype.init选择器构造函数源码思路分析
2013/02/05 Javascript
JQuery 实现在同一页面锚点链接之间的平滑滚动
2014/10/29 Javascript
javascript实现的右下角弹窗实例
2015/04/24 Javascript
jQuery切换所有复选框选中状态的方法
2015/07/02 Javascript
js实现兼容性好的微软官网导航下拉菜单效果
2015/09/07 Javascript
自定义vue全局组件use使用、vuex的使用详解
2017/06/14 Javascript
angularjs实现猜大小功能
2017/10/23 Javascript
Angular4实现图片上传预览路径不安全的问题解决
2017/12/25 Javascript
JS内部事件机制之单线程原理
2018/07/02 Javascript
微信小程序开发背景图显示功能
2018/08/08 Javascript
微信小程序之高德地图多点路线规划过程示例详解
2021/01/18 Javascript
[49:31]TFT vs Mski Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
python通过wxPython打开一个音频文件并播放的方法
2015/03/25 Python
Python中文分词实现方法(安装pymmseg)
2016/06/14 Python
Python+Selenium+PIL+Tesseract自动识别验证码进行一键登录
2017/09/20 Python
Python numpy 常用函数总结
2017/12/07 Python
Python实现统计给定列表中指定数字出现次数的方法
2018/04/11 Python
带你认识Django
2019/01/15 Python
Python 微信之获取好友昵称并制作wordcloud的实例
2019/02/21 Python
PyTorch的自适应池化Adaptive Pooling实例
2020/01/03 Python
python调用jenkinsAPI构建jenkins,并传递参数的示例
2020/12/09 Python
html5+css3气泡组件的实现
2014/11/21 HTML / CSS
巴西香水和化妆品购物网站:The Beauty Box
2019/09/03 全球购物
艺术学院毕业生求职信
2014/07/09 职场文书
个人剖析材料范文
2014/09/30 职场文书
2014年心理健康教育工作总结
2014/12/06 职场文书
百家讲坛观后感
2015/06/12 职场文书
如何用JavaScript检测当前浏览器是无头浏览器
2021/04/27 Javascript