身份证验证前后端代码
(1)身份证验证JAVA代码:
?
(2)身份证验证js代码:
/** * 功能描述:身份证号合法性验证 * @param idcard 身份证号 */validateIDCard : function(idcard) {//验证提示var Errors = new Array("验证通过!", "身份证号码位数不对!", "身份证号码出生日期超出范围或含有非法字符!","身份证号码校验错误!", "身份证地区非法!");//地区编码var area = {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 : "国外"}var idcard, Y, JYM;var S, M;var idcard_array = new Array();idcard_array = idcard.split("");// 地区检验if (area[parseInt(idcard.substr(0, 2))] == null)return Errors[4];// 身份号码位数及格式检验switch (idcard.length) {case 15 :if ((parseInt(idcard.substr(6, 2)) + 1900) % 4 == 0|| ((parseInt(idcard.substr(6, 2)) + 1900) % 100 == 0 && (parseInt(idcard.substr(6, 2)) + 1900)% 4 == 0)) {ereg = /^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$/;// 测试出生日期的合法性} else {ereg = /^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$/;// 测试出生日期的合法性}if (ereg.test(idcard))return ;//Errors[0];elsereturn Errors[2];break;case 18 :// 18位身份号码检测// 出生日期的合法性检查// 闰年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))// 平年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))if (parseInt(idcard.substr(6, 4)) % 4 == 0|| (parseInt(idcard.substr(6, 4)) % 100 == 0 && parseInt(idcard.substr(6, 4))% 4 == 0)) {ereg = /^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$/;// 闰年出生日期的合法性正则表达式} else {ereg = /^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$/;// 平年出生日期的合法性正则表达式}if (ereg.test(idcard)) {// 测试出生日期的合法性// 计算校验位S = (parseInt(idcard_array[0]) + parseInt(idcard_array[10]))* 7+ (parseInt(idcard_array[1]) + parseInt(idcard_array[11]))* 9+ (parseInt(idcard_array[2]) + parseInt(idcard_array[12]))* 10+ (parseInt(idcard_array[3]) + parseInt(idcard_array[13]))* 5+ (parseInt(idcard_array[4]) + parseInt(idcard_array[14]))* 8+ (parseInt(idcard_array[5]) + parseInt(idcard_array[15]))* 4+ (parseInt(idcard_array[6]) + parseInt(idcard_array[16]))* 2+ parseInt(idcard_array[7])* 1+ parseInt(idcard_array[8])* 6+ parseInt(idcard_array[9]) * 3;Y = S % 11;M = "F";JYM = "10X98765432";M = JYM.substr(Y, 1);//判断校验位if (M == idcard_array[17])return ;//Errors[0]; //检测ID的校验位elsereturn Errors[3];} elsereturn Errors[2];break;default :return Errors[1];break;}}, /** * 根据身份证号获取出生日期 * * @param idcardNo * 身份证号 * @return 出生日期 */ getBirthDayByIdCard : function(idcardNo) {var birthdayValue;//15位身份证号if (15 == idcardNo.length) { // 15位身份证号码birthdayValue = idcardNo.charAt(6) + idcardNo.charAt(7);if (parseInt(birthdayValue) < 10) {birthdayValue = '20' + birthdayValue;} else {birthdayValue = '19' + birthdayValue;}birthdayValue = birthdayValue + '-' + idcardNo.charAt(8)+ idcardNo.charAt(9) + '-' + idcardNo.charAt(10)+ idcardNo.charAt(11);}//18位身份证号if (18 == idcardNo.length) {birthdayValue = idcardNo.charAt(6) + idcardNo.charAt(7) + idcardNo.charAt(8)+ idcardNo.charAt(9) + '-' + idcardNo.charAt(10) + idcardNo.charAt(11)+ '-' + idcardNo.charAt(12) + idcardNo.charAt(13);}return birthdayValue;},/** * 根据身份证号获取性别 * * @param idcardNo * 身份证号 * @return 男性返回0,女性1 */getSexByIdCard : function(idcardNo) {var male = 0;var female = 1;if (15 == idcardNo.length) { // 15位身份证号码if (parseInt(idcardNo.charAt(14) / 2) * 2 != idcardNo.charAt(14)) {return male;} else {return female;}}// 18位身份证号if (18 == idcardNo.length) {if (parseInt(idcardNo.charAt(16) / 2) * 2 != idcardNo.charAt(16))return male;elsereturn female;}}?