當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
JS验证身份证
話不多說,直接看代碼
?
JS部分
/** * 身份證15位編碼規(guī)則:dddddd yymmdd xx p* dddddd:地區(qū)碼* yymmdd: 出生年月日* xx: 順序類編碼,無法確定* p: 性別,奇數為男,偶數為女* <p />* 身份證18位編碼規(guī)則:dddddd yyyymmdd xxx y* dddddd:地區(qū)碼* yyyymmdd: 出生年月日* xxx:順序類編碼,無法確定,奇數為男,偶數為女* y: 校驗碼,該位數值可通過前17位計算獲得* <p />* 18位號碼加權因子為(從右到左) wi = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2,1 ]* 驗證位 Y = [ 1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2 ]* 校驗位計算公式:Y_P = mod( ∑(Ai×wi),11 )* i為身份證號碼從右往左數的 2...18 位; Y_P為校驗碼所在校驗碼數組位置**/ // 加權因子 var wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1]; // 身份證驗證位值.10代表X var valideCodeArr = [1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2]; // 區(qū)域ID var areaMap = {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:"國外"}; // 男女ID var sexMap = {0:"女",1:"男"}; //錯誤信息 var status = new Array("true", "身份證號碼位數不對!", "身份證號碼出生日期超出范圍或含有非法字符!", "身份證號碼校驗錯誤!", "身份證地區(qū)非法!");/*** 驗證ID,正確返回“true”,錯誤則返回錯誤信息* @param {Object} idCard*/ function checkIdCard(idCard){//去掉首尾空格idCard = trim(idCard.replace(/ /g, ""));if (idCard.length == 15||idCard.length == 18) {if (!checkArea(idCard)) {return status[4];} else if(!checkBrith(idCard)){return status[2];} else if(idCard.length == 18 && !check18Code(idCard)){return status[3];} else {return status[0];}} else {//不是15或者18,位數不對return status[1];} }/*** 顯示解析出的信息* @param {Object} idCard 正確的ID號* @param {Object} sexId 性別要顯示的Input的id* @param {Object} birthId 生日要顯示的Input的id* @param {Object} areaId 地區(qū)要顯示的Input的id*/ function showIDInfo(idCard,areaId,sexId, birthId){// 對身份證號碼做處理。包括字符間有空格。idCard = trim(idCard.replace(/ /g, ""));// 性別$("#"+sexId).val(getSex(idCard));// 地區(qū)$("#"+areaId).val(getArea(idCard));//生日$("#"+birthId).val(getBirthday(idCard)); }/*** 得到地區(qū)碼代表的地區(qū) * @param {Object} idCard 正確的15/18位身份證號碼*/ function getArea(idCard){return areaMap[parseInt(idCard.substr(0, 2))]; }/** * 通過身份證得到性別* @param idCard 正確的15/18位身份證號碼* @return 女、男*/ function getSex(idCard){if (idCard.length == 15) {return sexMap[idCard.substring(14, 15) % 2];} else if (idCard.length == 18) {return sexMap[idCard.substring(14, 17) % 2];} else {//不是15或者18,nullreturn null;} }/*** 得到生日"yyyy-mm-dd"* @param {Object} idCard 正確的15/18位身份證號碼*/ function getBirthday(idCard){var birthdayStr;if (15 == idCard.length) {birthdayStr = idCard.charAt(6) + idCard.charAt(7);if (parseInt(birthdayStr) < 10) {birthdayStr = '20' + birthdayStr;} else {birthdayStr = '19' + birthdayStr;}birthdayStr = birthdayStr + '-' + idCard.charAt(8) + idCard.charAt(9) + '-' + idCard.charAt(10) + idCard.charAt(11);}else if (18 == idCard.length) {birthdayStr = idCard.charAt(6) + idCard.charAt(7) + idCard.charAt(8) + idCard.charAt(9) + '-' + idCard.charAt(10) + idCard.charAt(11) + '-' + idCard.charAt(12) + idCard.charAt(13);}return birthdayStr; }/*** 驗證身份證的地區(qū)碼* @param {Object} idCard 身份證字符串*/ function checkArea(idCard){if(areaMap[parseInt(idCard.substr(0, 2))] == null){return false;} else {return true;} }/** * 驗證身份證號碼中的生日是否是有效生日* @param idCard 身份證字符串* @return*/ function checkBrith(idCard){var result = true;if (15 == idCard.length) {var year = idCard.substring(6, 8);var month = idCard.substring(8, 10);var day = idCard.substring(10, 12);var temp_date = new Date(year, parseFloat(month) - 1, parseFloat(day));// 對于老身份證中的你年齡則不需考慮千年蟲問題而使用getYear()方法 if (temp_date.getYear() != parseFloat(year) || temp_date.getMonth() != parseFloat(month) - 1 || temp_date.getDate() != parseFloat(day)) {result = false;}} else if (18 == idCard.length) {var year = idCard.substring(6, 10);var month = idCard.substring(10, 12);var day = idCard.substring(12, 14);var temp_date = new Date(year, parseFloat(month) - 1, parseFloat(day));// 這里用getFullYear()獲取年份,避免千年蟲問題 if (temp_date.getFullYear() != parseFloat(year) || temp_date.getMonth() != parseFloat(month) - 1 || temp_date.getDate() != parseFloat(day)) {result = false;}} else {result = false;}return result; }/** * 判斷身份證號碼為18位時最后的驗證位是否正確* @param idCardArr 身份證號碼數組* @return*/ function check18Code(idCardArr){var sum = 0; // 聲明加權求和變量if (idCardArr[17].toLowerCase() == 'x') {idCardArr[17] = 10;// 將最后位為x的驗證碼替換為10方便后續(xù)操作 }for (var i = 0; i < 17; i++) {sum += wi[i] * idCardArr[i];// 加權求和 }var valCodePosition = sum % 11;// 得到驗證碼所位置if (idCardArr[17] == valideCodeArr[valCodePosition]) {return true;} else {return false;} }//去掉字符串頭尾空格 function trim(str){return str.replace(/(^\s*)|(\s*$)/g, ""); }HTML部分
<!DOCTYPE html> <html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>CordBirthday</title><script type="text/javascript" src="jquery-1.4.4.min.js"></script><script type="text/javascript" src="IDVerifier.js"></script><script type="text/javascript">function validite(){var id = $("#idCard").val();var resultstr = checkIdCard(id);if (resultstr == "true") {showIDInfo(id,"area" ,"sex", "birthday");} else {$('#sex').val("");$('#birthday').val("");$('#area').val("");alert(resultstr);}}</script></head><body><form><table align="center"><tr><td align="center">身份證<input type="text" id="idCard"></td></tr><tr><td align="center">地區(qū)<input type="text" id="area"></td></tr><tr><td align="center">性別<input type="text" id="sex"></td></tr><tr><td align="center">生日<input type="text" id="birthday"></td></tr><tr><td align="center"><input type="button" value="OK" onclick="validite()"></td></tr></table></form></body> </html>完
?
轉載于:https://www.cnblogs.com/chenhaoyu/p/9247246.html
總結
- 上一篇: JENKINS系统的安装部署
- 下一篇: Android接入支付宝支付实现