Node.js通過身份證號驗證年齡、出生日期與性別方法示例
前言
大家如果想要知道自己的年齡,出生日期和性別,或者是別人的,給我個身份證號,我就可以知道,其實很簡單的,看下面代碼。
node.js實現(xiàn)
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也可以實現(xiàn)
1. 自定義js類如下:
// 構(gòu)造函數(shù),變量為15位或者18位的身份證號碼 function clsIDCard(CardNo) { this.Valid = false; this.ID15 = ''; this.ID18 = ''; this.Local = ''; if (CardNo != null) this.SetCardNo(CardNo); } // 設(shè)置身份證號碼,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 : "內(nèi)蒙古", 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出對象,并傳遞數(shù)據(jù)驗證,并可獲得相關(guān)數(shù)據(jù)( 住址 | 出生日期 | 性別 )即可:
$("#cardNo").blur(function(event){ var idCard = $(this).val(); var checkFlag = new clsIDCard(idCard); if( !checkFlag.IsValid() ){ alert("身份證錯誤"); return false; }else{ alert( "出生于: " + checkFlag.GetBirthDate() +" 地區(qū):" + checkFlag.GetLocal() +" sex:" + checkFlag.GetSex() ); } });
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
Node.js 獲取微信JS-SDK CONFIG的方法示例
這篇文章主要介紹了Node.js 獲取微信JS-SDK CONFIG的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05Nodejs使用mysql2操作數(shù)據(jù)庫的方法完整講解
MySQL2是一個基于Node.js的MySQL數(shù)據(jù)庫驅(qū)動程序,它是MySQL官方推薦的驅(qū)動之一,下面這篇文章主要給大家介紹了關(guān)于Nodejs使用mysql2操作數(shù)據(jù)庫的相關(guān)資料,需要的朋友可以參考下2024-01-01nodejs清空/刪除指定文件夾下面所有文件或文件夾的方法示例
這篇文章主要介紹了nodejs清空/刪除指定文件夾下面所有文件或文件夾的方法,通過兩個具體案例形式分析了node.js同步刪除文件/文件夾,以及異步刪除文件/文件夾的相關(guān)實現(xiàn)技巧,涉及遞歸遍歷與文件判斷、回調(diào)等相關(guān)操作,需要的朋友可以參考下2023-04-04Nodejs多站點切換Htpps協(xié)議詳解及簡單實例
這篇文章主要介紹了Nodejs多站點切換Htpps協(xié)議詳解及簡單實例的相關(guān)資料,需要的朋友可以參考下2017-02-02node.js + socket.io 實現(xiàn)點對點隨機匹配聊天
這篇文章主要介紹了node.js + socket.io 實現(xiàn)點對點隨機匹配聊天,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-06-06使用node-canvas在服務(wù)端渲染echarts圖表解析
這篇文章主要介紹了使用node-canvas在服務(wù)端渲染echarts圖表解析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-10-10