身份证验证js
export function SFID(card) {var vcity = {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: "國外"};//檢查號碼是否符合規(guī)范,包括長度,類型 var isCardNo = function(card) {//身份證號碼為15位或者18位,15位時(shí)全為數(shù)字,18位前17位為數(shù)字,最后一位是校驗(yàn)位,可能為數(shù)字或字符X var reg = /(^\d{15}$)|(^\d{17}(\d|X)$)/;if (reg.test(card) === false) {return false;}return true;};//取身份證前兩位,校驗(yàn)省份var checkProvince = function(card) {var province = card.substr(0, 2);if (vcity[province] == undefined) {return false;}return true;};//檢查生日是否正確 var checkBirthday = function(card) {var len = card.length;//身份證15位時(shí),次序?yàn)槭?#xff08;3位)市(3位)年(2位)月(2位)日(2位)校驗(yàn)位(3位),皆為數(shù)字 if (len == '15') {var re_fifteen = /^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/;var arr_data = card.match(re_fifteen);var year = arr_data[2];var month = arr_data[3];var day = arr_data[4];var birthday = new Date('19' + year + '/' + month + '/' + day);return verifyBirthday('19' + year, month, day, birthday);}//身份證18位時(shí),次序?yàn)槭?#xff08;3位)市(3位)年(4位)月(2位)日(2位)校驗(yàn)位(4位),校驗(yàn)位末尾可能為Xif (len == '18') {var re_eighteen = /^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/;var arr_data = card.match(re_eighteen);console.log(arr_data) var year = arr_data[2];var month = arr_data[3];var day = arr_data[4];var birthday = new Date(year + '/' + month + '/' + day);return verifyBirthday(year, month, day, birthday);}return false;};//校驗(yàn)日期var verifyBirthday = function(year, month, day, birthday) {var now = new Date();var now_year = now.getFullYear(); //年月日是否合理 if (birthday.getFullYear() == year && (birthday.getMonth() + 1) == month && birthday.getDate() == day) {//判斷年份的范圍(3歲到100歲之間)var time = now_year - year;console.log(time) if (time <= 100) {return true;}return false;}return false;}; //校驗(yàn)位的檢測 var checkParity = function(card) {//15位轉(zhuǎn)18位 card = changeFivteenToEighteen(card);var len = card.length;if (len == '18') {var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');var cardTemp = 0,i, valnum;for (i = 0; i < 17; i++) {cardTemp += card.substr(i, 1) * arrInt[i];}valnum = arrCh[cardTemp % 11];if (valnum == card.substr(17, 1)) {return true;}return false;}return false;};//15位轉(zhuǎn)18位身份證號 var changeFivteenToEighteen = function(card) {if (card.length == '15') {var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');var cardTemp = 0,i;card = card.substr(0, 6) + '19' + card.substr(6, card.length - 6);for (i = 0; i < 17; i++) {cardTemp += card.substr(i, 1) * arrInt[i];}card += arrCh[cardTemp % 11];return card;}return card;}; //是否為空 if (card === '') {console.log('請輸入身份證號,身份證號不能為空');return false;} //校驗(yàn)長度,類型if (isCardNo(card) === false) {console.log('您輸入的身份證號碼不正確,請重新輸入');return false;} //檢查省份if (checkProvince(card) === false) {console.log('您輸入的身份證號碼不正確,請重新輸入');return false;}//校驗(yàn)生日if (checkBirthday(card) === false) {console.log('您輸入的身份證號碼生日不正確,請重新輸入');return false;}//檢驗(yàn)位的檢測if (checkParity(card) === false) {console.log('您的身份證校驗(yàn)位不正確,請重新輸入');return false;} // console.info("OK");return true;
};
總結(jié)
- 上一篇: 【机器学习】六种算法在人脸补全中的应用比
- 下一篇: Django-安装xadmin的方法及主