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 相关文章推荐
javascript removeChild 使用注意事项
Apr 11 Javascript
JS动画效果打开、关闭层的实现方法
May 09 Javascript
bootstrap实现弹窗和拖动效果
Jan 03 Javascript
基于javascript制作微博发布栏效果
Apr 04 Javascript
AngularJS Bootstrap详细介绍及实例代码
Jul 28 Javascript
BootStrap网页中代码显示用法详解
Oct 21 Javascript
vue登录路由验证的实现
Dec 13 Javascript
200行代码实现blockchain 区块链实例详解
Mar 14 Javascript
利用vue-i18n实现多语言切换效果的方法
Jun 19 Javascript
vue实现配置全局访问路径头(axios)
Nov 01 Javascript
原理深度解析Vue的响应式更新比React快
Apr 04 Javascript
在Vue中获取自定义属性方法:data-id的实例
Sep 09 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
Laravel框架分页实现方法分析
2018/06/12 PHP
select 控制网页内容隐藏于显示的实现代码
2010/05/25 Javascript
js中更短的 Array 类型转换
2011/10/30 Javascript
js实现屏蔽默认快捷键调用自定义事件示例
2013/06/18 Javascript
jQuery判断checkbox是否选中的小例子
2013/12/02 Javascript
jquery原创弹出层折叠效果点击折叠弹出一个层
2014/03/12 Javascript
Jquery实现由下向上展开效果的例子
2014/12/08 Javascript
innerHTML中标签可以换行的方法汇总
2015/08/14 Javascript
Node.js静态文件服务器改进版
2016/01/10 Javascript
jQuery实现的图片轮播效果完整示例
2016/09/12 Javascript
ionic由于使用了header和subheader导致被遮挡的问题的两种解决方法
2016/09/22 Javascript
JavaScript仿微博发布信息案例
2016/11/16 Javascript
关于vuex的学习实践笔记
2017/04/05 Javascript
JavaScript创建对象的七种方式(推荐)
2017/06/26 Javascript
jQuery开源组件BootstrapValidator使用详解
2017/06/29 jQuery
Angular 2父子组件数据传递之@Input和@Output详解 (上)
2017/07/05 Javascript
小程序开发基础之view视图容器
2018/08/21 Javascript
vue进入页面时不在顶部,检测滚动返回顶部按钮问题及解决方法
2019/10/30 Javascript
js实现滚动条自动滚动
2020/12/13 Javascript
Python KMeans聚类问题分析
2018/02/23 Python
python中单下划线(_)和双下划线(__)的特殊用法
2019/08/29 Python
解决Numpy中sum函数求和结果维度的问题
2019/12/06 Python
使用Tensorflow实现可视化中间层和卷积层
2020/01/24 Python
解决Django Haystack全文检索为空的问题
2020/05/19 Python
Python3 ID3决策树判断申请贷款是否成功的实现代码
2020/05/21 Python
使用opencv中匹配点对的坐标提取方式
2020/06/04 Python
利用python+request通过接口实现人员通行记录上传功能
2021/01/13 Python
Pycharm 设置默认解释器路径和编码格式的操作
2021/02/05 Python
HTML5和CSS3实例教程总结(推荐)
2016/07/18 HTML / CSS
中国旅游网站:途牛旅游网
2019/09/29 全球购物
新加坡第一的杂货零售商:NTUC FairPrice
2020/12/05 全球购物
2014年小学班主任工作总结
2014/11/08 职场文书
2015年统计员个人工作总结
2015/07/23 职场文书
2016年社区六一儿童节活动总结
2016/04/06 职场文书
详解MySQL事务的隔离级别与MVCC
2021/04/22 MySQL
angular4实现带搜索的下拉框
2022/03/25 Javascript