Node.js通过身份证号验证年龄、出生日期与性别方法示例


Posted in Javascript onMarch 09, 2017

前言

大家如果想要知道自己的年龄,出生日期和性别,或者是别人的,给我个身份证号,我就可以知道,其实很简单的,看下面代码。

node.js实现

static validateIdNumberToAgeYear(str){
 let date = new Date();
 let currentYear = date.getFullYear();
 let currentMonth = date.getMonth() + 1;
 let currentDate = date.getDate();
 
 let idxSexStart = str.length == 18 ? 16 : 14;
 let birthYearSpan = str.length == 18 ? 4 : 2;

 let year;
 let month;
 let day;
 let sex;
 let birthday;
 let age;

 //性别
 let idxSex = 1 - str.substr(idxSexStart, 1) % 2; 
 sex = idxSex == '1' ? '女' : '男'; 
 //生日
 year = (birthYearSpan == 2 ? '19' : '') + str.substr(6, birthYearSpan); 
 month = str.substr(6 + birthYearSpan, 2); 
 day = str.substr(8 + birthYearSpan, 2); 
 birthday = year + '-' + month + '-' + day; 
 //年龄
 let monthFloor = (currentMonth < parseInt(month,10) || (currentMonth == parseInt(month,10) && currentDate < parseInt(day,10))) ? 1 : 0;
 age = currentYear - parseInt(year,10) - monthFloor; 

 // console.log("我的出生日期是"+year+"年"+month+"月"+day+"日"+",今年"+age+"岁了"+",性别是"+sex);

 if(age >= 18){
  return true; 
 }
 
 return false;
}

我这里只是做了一个年龄的判断。

利用js也可以实现

1. 自定义js类如下:

// 构造函数,变量为15位或者18位的身份证号码 
function clsIDCard(CardNo) { 
 this.Valid = false; 
 this.ID15 = ''; 
 this.ID18 = ''; 
 this.Local = ''; 
 if (CardNo != null) 
  this.SetCardNo(CardNo); 
} 


// 设置身份证号码,15位或者18位 
clsIDCard.prototype.SetCardNo = function(CardNo) { 
 this.ID15 = ''; 
 this.ID18 = ''; 
 this.Local = ''; 
 CardNo = CardNo.replace(" ", ""); 
 var strCardNo; 
 if (CardNo.length == 18) { 
  pattern = /^\d{17}(\d|x|X)$/; 
  if (pattern.exec(CardNo) == null) 
   return; 
  strCardNo = CardNo.toUpperCase(); 
 } else { 
  pattern = /^\d{15}$/; 
  if (pattern.exec(CardNo) == null) 
   return; 
  strCardNo = CardNo.substr(0, 6) + '19' + CardNo.substr(6, 9) 
  strCardNo += this.GetVCode(strCardNo); 
 } 
 this.Valid = this.CheckValid(strCardNo); 
} 
// 校验身份证有效性 
clsIDCard.prototype.IsValid = function() { 
 return this.Valid; 
} 
// 返回生日字符串,格式如下,1981-10-10 
clsIDCard.prototype.GetBirthDate = function() { 
 var BirthDate = ''; 
 if (this.Valid) 
  BirthDate = this.GetBirthYear() + '-' + this.GetBirthMonth() + '-' 
    + this.GetBirthDay(); 
 return BirthDate; 
} 
// 返回生日中的年,格式如下,1981 
clsIDCard.prototype.GetBirthYear = function() { 
 var BirthYear = ''; 
 if (this.Valid) 
  BirthYear = this.ID18.substr(6, 4); 
 return BirthYear; 
} 
// 返回生日中的月,格式如下,10 
clsIDCard.prototype.GetBirthMonth = function() { 
 var BirthMonth = ''; 
 if (this.Valid) 
  BirthMonth = this.ID18.substr(10, 2); 
 if (BirthMonth.charAt(0) == '0') 
  BirthMonth = BirthMonth.charAt(1); 
 return BirthMonth; 
} 
// 返回生日中的日,格式如下,10 
clsIDCard.prototype.GetBirthDay = function() { 
 var BirthDay = ''; 
 if (this.Valid) 
  BirthDay = this.ID18.substr(12, 2); 
 return BirthDay; 
} 

// 返回性别,1:男,0:女 
clsIDCard.prototype.GetSex = function() { 
 var Sex = ''; 
 if (this.Valid) 
  Sex = this.ID18.charAt(16) % 2; 
 return Sex; 
} 

// 返回15位身份证号码 
clsIDCard.prototype.Get15 = function() { 
 var ID15 = ''; 
 if (this.Valid) 
  ID15 = this.ID15; 
 return ID15; 
} 

// 返回18位身份证号码 
clsIDCard.prototype.Get18 = function() { 
 var ID18 = ''; 
 if (this.Valid) 
  ID18 = this.ID18; 
 return ID18; 
} 

// 返回所在省,例如:上海市、浙江省 
clsIDCard.prototype.GetLocal = function() { 
 var Local = ''; 
 if (this.Valid) 
  Local = this.Local; 
 return Local; 
} 

clsIDCard.prototype.GetVCode = function(CardNo17) { 
 var Wi = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1); 
 var Ai = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'); 
 var cardNoSum = 0; 
 for (var i = 0; i < CardNo17.length; i++) 
  cardNoSum += CardNo17.charAt(i) * Wi[i]; 
 var seq = cardNoSum % 11; 
 return Ai[seq]; 
} 

clsIDCard.prototype.CheckValid = function(CardNo18) { 
 if (this.GetVCode(CardNo18.substr(0, 17)) != CardNo18.charAt(17)) 
  return false; 
 if (!this.IsDate(CardNo18.substr(6, 8))) 
  return false; 
 var aCity = { 
  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 : "国外" 
 }; 
 if (aCity[parseInt(CardNo18.substr(0, 2))] == null) 
  return false; 
 this.ID18 = CardNo18; 
 this.ID15 = CardNo18.substr(0, 6) + CardNo18.substr(8, 9); 
 this.Local = aCity[parseInt(CardNo18.substr(0, 2))]; 
 return true; 
} 

clsIDCard.prototype.IsDate = function(strDate) { 
 var r = strDate.match(/^(\d{1,4})(\d{1,2})(\d{1,2})$/); 
 if (r == null) 
  return false; 
 var d = new Date(r[1], r[2] - 1, r[3]); 
 return (d.getFullYear() == r[1] && (d.getMonth() + 1) == r[2] && d 
   .getDate() == r[3]); 
}

2. 页面只需要new出对象,并传递数据验证,并可获得相关数据( 住址 | 出生日期 | 性别 )即可:

$("#cardNo").blur(function(event){ 
  var idCard = $(this).val(); 
   
  var checkFlag = new clsIDCard(idCard);  
  if( !checkFlag.IsValid() ){ 
   alert("身份证错误"); 
   return false; 
  }else{ 
   alert( "出生于: " + checkFlag.GetBirthDate() +" 地区:" + checkFlag.GetLocal() +" sex:" + checkFlag.GetSex() ); 
  }   
 });

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
ExtJS下 Ext.Direct加载和提交过程排错小结
Apr 02 Javascript
jquery自定义函数的多种方法
Jan 09 Javascript
jQuery仿Flash上下翻动的中英文导航菜单实例
Mar 10 Javascript
jQuery实现为图片添加镜头放大效果的方法
Jun 25 Javascript
如何防止JavaScript自动插入分号
Nov 05 Javascript
JS未跨域操作iframe里的DOM
Jun 01 Javascript
Bootstrap基本样式学习笔记之表格(2)
Dec 07 Javascript
ES6新特性八:async函数用法实例详解
Apr 21 Javascript
页面间固定参数,通过cookie传值的实现方法
May 31 Javascript
使用vue-cli+webpack搭建vue开发环境的方法
Dec 22 Javascript
vue slots 组件的组合/分发实例
Sep 06 Javascript
vue在图片上传的时候压缩图片
Nov 18 Vue.js
基于jQuery实现一个marquee无缝滚动的插件
Mar 09 #Javascript
jQuery插件HighCharts绘制2D圆环图效果示例【附demo源码下载】
Mar 09 #Javascript
js实现显示手机号码效果
Mar 09 #Javascript
jQuery插件HighCharts绘制2D半圆环图效果示例【附demo源码下载】
Mar 09 #Javascript
javascript 秒表计时器实现代码
Mar 09 #Javascript
react实现pure render时bind(this)隐患需注意!
Mar 09 #Javascript
使用bootstrap-paginator.js 分页来进行ajax 异步分页请求示例
Mar 09 #Javascript
You might like
Yii框架使用PHPExcel导出Excel文件的方法分析【改进版】
2019/07/24 PHP
jquery easyui的tabs使用时的问题
2010/03/23 Javascript
jQuery LigerUI 插件介绍及使用之ligerDrag和ligerResizable示例代码打包
2011/04/06 Javascript
一个基于jQuery的树型插件(OrangeTree)使用介绍
2012/05/03 Javascript
js操作table示例(个人心得)
2013/11/29 Javascript
浅谈Javascript变量作用域问题
2014/12/16 Javascript
浅谈angularjs $http提交数据探索
2017/01/20 Javascript
jQuery源码分析之sizzle选择器详解
2017/02/13 Javascript
单行 JS 实现移动端金钱格式的输入规则
2017/05/22 Javascript
使用 Node.js 开发资讯爬虫流程
2018/01/07 Javascript
React组件内事件传参实现tab切换的示例代码
2018/07/04 Javascript
iview Upload组件多个文件上传的示例代码
2018/09/30 Javascript
vue使用Proxy实现双向绑定的方法示例
2019/03/20 Javascript
webpack-mvc 传统多页面组件化开发详解
2019/05/07 Javascript
vue实现分页加载效果
2019/12/24 Javascript
分享8个JavaScript库可更好地处理本地存储
2020/10/12 Javascript
[02:11]2016国际邀请赛中国区预选赛最美TA采访现场玩家
2016/06/28 DOTA
python 中的int()函数怎么用
2017/10/17 Python
神经网络理论基础及Python实现详解
2017/12/15 Python
Python编程实现线性回归和批量梯度下降法代码实例
2018/01/04 Python
Python实现自动上京东抢手机
2018/02/06 Python
Python不使用int()函数把字符串转换为数字的方法
2018/07/09 Python
python 中文件输入输出及os模块对文件系统的操作方法
2018/08/27 Python
python实现基于信息增益的决策树归纳
2018/12/18 Python
Win10+GPU版Pytorch1.1安装的安装步骤
2019/09/27 Python
python函数装饰器之带参数的函数和带参数的装饰器用法示例
2019/11/06 Python
在IE6系列等老式浏览器中使用HTML5的新标签实现方案
2012/12/25 HTML / CSS
Madda Fella官网:美国冒险家服装品牌
2020/01/16 全球购物
仓库管理制度
2014/01/21 职场文书
电气工程自动化求职信
2014/03/14 职场文书
大专生自荐书范文
2014/06/22 职场文书
家长学校培训材料
2014/08/20 职场文书
受伤赔偿协议书
2014/09/24 职场文书
2015年政务公开工作总结
2015/05/19 职场文书
掌握这项技巧,一年阅读300本书不是梦
2019/09/12 职场文书
授权协议书范本(3篇)
2019/10/15 职场文书