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 相关文章推荐
基于JQuery.timer插件实现一个计时器
Apr 25 Javascript
JS分页效果示例
Oct 11 Javascript
借助javascript代码判断网页是静态还是伪静态
May 05 Javascript
使用Node.js实现一个简单的FastCGI服务器实例
Jun 09 Javascript
jQuery实现跟随鼠标运动图层效果的方法
Feb 02 Javascript
基于JS实现导航条flash导航条
Jun 17 Javascript
解析浏览器端的AJAX缓存机制
Jun 21 Javascript
vue中配置mint-ui报css错误问题的解决方法
Oct 11 Javascript
详解使用create-react-app快速构建React开发环境
May 16 Javascript
原生JS实现简单的无缝自动轮播效果
Sep 26 Javascript
Nuxt使用Vuex的方法示例
Sep 06 Javascript
vue.js+ElementUI实现进度条提示密码强度效果
Jan 18 Javascript
基于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
哪吒敖丙传:新人物二哥敖乙出场 小敖丙奶气十足
2020/03/08 国漫
PHP 长文章分页函数 带使用方法,不会分割段落,翻页在底部
2009/10/22 PHP
php smarty 二级分类代码和模版循环例子
2011/06/01 PHP
php使用Jpgraph绘制3D饼状图的方法
2015/06/10 PHP
PHP+AJAX 投票器功能
2017/11/11 PHP
php反射学习之不用new方法实例化类操作示例
2019/06/14 PHP
检测是否已安装 .NET Framework 3.5的js脚本
2009/02/14 Javascript
js 代码集(学习js的朋友可以看下)
2009/07/22 Javascript
javascript写的一个链表实现代码
2009/10/25 Javascript
防止文件缓存的js代码
2013/01/10 Javascript
使用AngularJS创建单页应用的编程指引
2015/06/19 Javascript
Javascript实现获取及设置光标位置的方法
2015/07/21 Javascript
javascript数据类型验证方法
2015/12/31 Javascript
jQuery实现的多滑动门,多选项卡效果代码
2016/03/28 Javascript
JavaScript判断用户名和密码不能为空的实现代码
2016/05/16 Javascript
js获取form表单所有数据的简单方法
2016/08/18 Javascript
js实现右键自定义菜单
2016/12/03 Javascript
JavaScript触发onScroll事件的函数节流详解
2016/12/14 Javascript
Spring Boot+AngularJS+BootStrap实现进度条示例代码
2017/03/02 Javascript
Bootstrap栅格系统简单实现代码
2017/03/06 Javascript
JQuery选中select组件被选中的值方法
2018/03/08 jQuery
微信小程序scroll-view横向滑动嵌套for循环的示例代码
2018/09/20 Javascript
es6函数之尾调用优化实例分析
2020/04/25 Javascript
Vue实现简单的拖拽效果
2020/08/25 Javascript
python基础教程之自定义函数介绍
2014/08/29 Python
对python 调用类属性的方法详解
2019/07/02 Python
基于python爬取有道翻译过程图解
2020/03/31 Python
BOSE德国官网:尽探索之力,享音乐之极
2016/12/11 全球购物
回馈慈善的设计师太阳镜:DIFF eyewear
2019/10/17 全球购物
中医专业应届生求职信
2013/11/17 职场文书
优秀学生自我鉴定范例
2013/12/18 职场文书
索桥的故事教学反思
2014/02/06 职场文书
关于感恩的演讲稿200字
2014/08/26 职场文书
打架检讨书范文
2015/01/27 职场文书
信息技术远程培训心得体会
2016/01/09 职场文书
一文了解JavaScript用Element Traversal新属性遍历子元素
2021/11/27 Javascript