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 相关文章推荐
了解jQuery技巧来提高你的代码
Jan 08 Javascript
javascript重写alert方法的实例代码
Mar 29 Javascript
用javascript替换URL中的参数值示例代码
Jan 27 Javascript
浅谈Sizzle的“编译原理”
Apr 14 Javascript
javascript实现控制的多级下拉菜单
Jul 05 Javascript
用file标签实现多图文件上传预览
Feb 14 Javascript
jQuery滚动监听实现商城楼梯式导航效果
Mar 06 Javascript
MUI  Scroll插件的使用详解
Apr 13 Javascript
JS FormData上传文件的设置方法
Jul 05 Javascript
vue轮播图插件vue-concise-slider的使用
Mar 13 Javascript
vue服务端渲染操作简单入门实例分析
Aug 28 Javascript
浅析JavaScript 函数防抖和节流
Jul 13 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
关于BIG5-HKSCS的解决方法
2007/03/20 PHP
web server使用php生成web页面的三种方法总结
2013/10/28 PHP
php二分查找二种实现示例
2014/03/12 PHP
php中this关键字用法分析
2016/12/07 PHP
关于Laravel Route重定向的一个注意点
2017/01/16 PHP
javascript之AJAX框架使用说明
2010/04/24 Javascript
Javascript的&amp;&amp;和||的另类用法
2014/07/23 Javascript
浅谈Javascript线程及定时机制
2015/07/02 Javascript
node.js require() 源码解读
2015/12/13 Javascript
通过JS获取Request.QueryString()参数的值实现方法
2016/09/27 Javascript
关于webuploader插件使用过程遇到的小问题
2016/11/07 Javascript
addEventListener()与removeEventListener()解析
2017/04/20 Javascript
jQuery实现的滑块滑动导航效果示例
2018/06/04 jQuery
vue实现键盘输入支付密码功能
2018/08/18 Javascript
vue数据初始化initState的实例详解
2019/04/11 Javascript
vue中v-show和v-if的异同及v-show用法
2019/06/06 Javascript
在微信小程序中渲染HTML内容3种解决方案及分析与问题解决
2020/01/12 Javascript
vue+高德地图实现地图搜索及点击定位操作
2020/09/09 Javascript
解决vue项目本地启动时无法携带cookie的问题
2021/02/06 Vue.js
[00:36]DOTA2勇士令状莱恩声望物品——冥晶之厄展示
2018/05/25 DOTA
Python生成验证码实例
2014/08/21 Python
Python遍历目录并批量更换文件名和目录名的方法
2016/09/19 Python
pygame实现雷电游戏雏形开发
2018/11/20 Python
Python实现时间序列可视化的方法
2019/08/06 Python
Python getsizeof()和getsize()区分详解
2020/11/20 Python
python 监控服务器是否有人远程登录(详细思路+代码)
2020/12/18 Python
Html5移动端网页端适配(js+rem)
2021/02/03 HTML / CSS
The Hut美国/加拿大:英国领先的豪华在线百货商店
2019/03/26 全球购物
日本最大的购物网站乐天市场国际版:Rakuten Global Market(支持中文)
2020/02/03 全球购物
shell程序中如何注释
2012/02/17 面试题
学年自我鉴定范文
2013/10/01 职场文书
管理科学大学生求职信
2013/11/13 职场文书
如何撰写岗位职责
2014/02/01 职场文书
《富饶的西沙群岛》教学反思
2014/04/09 职场文书
迟到检讨书范文
2015/01/27 职场文书
django项目、vue项目部署云服务器的详细过程
2022/07/23 Servers