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 相关文章推荐
(currentStyle)javascript为何有时用style得不到已设定的CSS的属性
Aug 15 Javascript
javascript 星级评分效果(手写)
Dec 24 Javascript
Angularjs基础知识及示例汇总
Jan 22 Javascript
JavaScript弹出新窗口后向父窗口输出内容的方法
Apr 06 Javascript
jQuery实现的动态伸缩导航菜单实例
May 07 Javascript
JS简单限制textarea内输入字符数量的方法
Oct 14 Javascript
Javascript 字符串模板的简单实现
Feb 13 Javascript
详解如何使用vue-cli脚手架搭建Vue.js项目
May 19 Javascript
JS实现访问DOM对象指定节点的方法示例
Apr 04 Javascript
vue实现多个元素或多个组件之间动画效果
Sep 25 Javascript
详解vue中this.$emit()的返回值是什么
Apr 07 Javascript
基于jquery实现彩色投票进度条代码解析
Aug 26 jQuery
微信小程序云开发之使用云函数
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
基于qmail的完整WEBMAIL解决方案安装详解
2006/10/09 PHP
PhpMyAdmin中无法导入sql文件的解决办法
2010/01/08 PHP
php URL验证正则表达式
2011/07/19 PHP
PHP之正则表达式捕获组与非捕获组(详解)
2015/07/29 PHP
PHP生成及获取JSON文件的方法
2016/08/23 PHP
php连接微软MSSQL(sql server)完全攻略
2016/11/27 PHP
thinkPHP和onethink微信支付插件分享
2019/08/11 PHP
jQuery的slideToggle方法实例
2013/05/07 Javascript
原生js和jquery中有关透明度设置的相关问题
2014/01/08 Javascript
Jquery 效果使用详解
2015/11/23 Javascript
jQuery防止重复绑定事件的解决方法
2016/05/14 Javascript
AngularJS基础 ng-keydown 指令简单示例
2016/08/02 Javascript
微信小程序 视图层(xx.xml)和逻辑层(xx.js)详细介绍
2016/10/13 Javascript
js实现日历的简单算法
2017/01/24 Javascript
js 事件的传播机制(实例讲解)
2017/07/20 Javascript
BootStrap Fileinput插件和Bootstrap table表格插件相结合实现文件上传、预览、提交的导入Excel数据操作步骤
2017/08/07 Javascript
laydate 显示结束时间不小于开始时间的实例
2017/08/11 Javascript
Angular2进阶之如何避免Dom误区
2018/04/02 Javascript
Vue在页面右上角实现可悬浮/隐藏的系统菜单
2018/05/04 Javascript
微信小程序image图片加载完成监听
2019/08/31 Javascript
js实现适配移动端的拖动效果
2020/01/13 Javascript
JavaScript 双向链表操作实例分析【创建、增加、查找、删除等】
2020/04/28 Javascript
[05:46]2018完美盛典-《同梦共竞》
2018/12/17 DOTA
Python2.x和3.x下maketrans与translate函数使用上的不同
2015/04/13 Python
使用url_helper简化Python中Django框架的url配置教程
2015/05/30 Python
docker django无法访问redis容器的解决方法
2019/08/21 Python
Django框架序列化与反序列化操作详解
2019/11/01 Python
pytorch 归一化与反归一化实例
2019/12/31 Python
解决pytorch报错:AssertionError: Invalid device id的问题
2020/01/10 Python
Python pandas 列转行操作详解(类似hive中explode方法)
2020/05/18 Python
中专生自我鉴定
2013/12/17 职场文书
经典优秀毕业生求职信范文分享
2013/12/18 职场文书
2015年护士医德医风自我评价
2015/03/03 职场文书
导游词之太湖
2019/10/08 职场文书
详解MySQL数据库千万级数据查询和存储
2021/05/18 MySQL
Python机器学习应用之工业蒸汽数据分析篇详解
2022/01/18 Python