jq身份证号验证(详细)

//检查确认身份证是否合法(新)
function checkCardNumber(text, callback){


checkAge = true;
var number = text;
if (number == null || number == "") {
return callback("请输入真实有效的身份证号");
// eleCtrlShow($('#realNum'),'.comm','activeErr','请输入真实有效的身份证号');
// return false;
}
if (!cc_checkPersonidRegister(text)) {
return callback("格式有误,请重新输入");
// eleCtrlShow($('#realNum'),'.comm','activeErr','格式有误,请重新输入');
// return false;
}
eleCtrlHide($('#realNum'),'.comm','activeErr');
return true;
}


function cc_checkPersonidRegister(text) {
$(this).val($.trim(text));
var personid = text;


if (personid.length == 15 || personid.length == 18) {


if (checkIdCard(personid)) {
if (!checkDate()) {
return false;
} else {
return true;
}
} else {
return false;
}
} else {
return false;
}
}


// 检查身份证号码


function checkDate(y1, y2, y3) {
if (Number(y2) != 1 && Number(y2) != 3 && Number(y2) != 5
&& Number(y2) != 7 && Number(y2) != 8 && Number(y2) != 10
&& Number(y2) != 12) {
if (Number(y3) > 30) {
return false;
}
}
if (Number(y2) == 2) {
if (Number(y1) % 100 == 0) {
if (Number(y1) % 400 == 0) {
if (Number(y3) > 29) {
return false;
}
} else {
if (Number(y3) > 28) {
return false;
}
}
} else {
if (Number(y1) % 4 == 0) {
if (Number(y3) > 29) {
return false;
}
} else {
if (Number(y3) > 28) {
return false;
}
}
}
}
return true;
}


// 身份证校验,实名制验证,规则091223b
var checkAge = true;
function checkIdCard(personid) {
if (personid.length == 15 || personid.length == 18) {
// 检查是否含有特殊字符
if (personid.length == 15) {
for (i = 0; i < personid.length; i++) {
if (isNaN(parseInt(personid.charAt(i), 10))) {
alert('身份证号码中含有非法字符1');
// 身份证号码中含有非法字符
return false;
}
}
} else {
for (i = 0; i < personid.length - 1; i++) {
if (isNaN(parseInt(personid.charAt(i), 10))) {
alert('身份证号码中含有非法字符2');
// 身份证号码中含有非法字符
return false;
}
}
var lastIDNum = personid.charAt(17);
if (isNaN(parseInt(lastIDNum, 10))
&& lastIDNum.toLowerCase() != 'x') {
alert('身份证号码中含有非法字符3');
// 身份证号码中含有非法字符
return false;
}
}


// 地区
var area1 = personid.substr(0, 2);
var area2 = personid.substr(2, 2);
var area3 = personid.substr(4, 2);
if (area1 != "11" && area1 != "12" && area1 != "13" && area1 != "14"
&& area1 != "15" && area1 != "21" && area1 != "22"
&& area1 != "23" && area1 != "31" && area1 != "32"
&& area1 != "33" && area1 != "34" && area1 != "35"
&& area1 != "36" && area1 != "37" && area1 != "41"
&& area1 != "42" && area1 != "43" && area1 != "44"
&& area1 != "45" && area1 != "46" && area1 != "50"
&& area1 != "51" && area1 != "52" && area1 != "53"
&& area1 != "54" && area1 != "61" && area1 != "62"
&& area1 != "63" && area1 != "64" && area1 != "65"
&& area1 != "71" && area1 != "81" && area1 != "82"
&& area1 != "91") {
// 身份证号码中地区编码不正确
alert('身份证号码中地区编码不正确');
return false;
}


/*
* 修正091223b if(area2=="00"){ idcshow.style.display="";
* dividc.innerHTML="<font color=red>身份证号码中地区编码不正确!</font>";
* div_idcard.className = "ico_false"; MsgShow.style.display="";
* MsgShow.innerHTML="<font color=black>身份证输入错误</font>";
* PersonMark.value="0"; return false; } if(area3=="00"){
* idcshow.style.display=""; dividc.innerHTML="<font
* color=red>身份证号码中地区编码不正确!</font>"; div_idcard.className =
* "ico_false"; MsgShow.style.display=""; MsgShow.innerHTML="<font
* color=black>身份证输入错误</font>"; PersonMark.value="0"; return false; }
*/


// 年月日
var yyyy = "";
var mm = "";
var dd = "";
var yy1 = "";
if (personid.length == 15) {
yy1 = "19";
yyyy = yy1 + personid.substr(6, 2);
mm = personid.substr(8, 2);
dd = personid.substr(10, 2);
} else if (personid.length == 18) {
yy1 = personid.substr(6, 2);
yyyy = personid.substr(6, 4);
mm = personid.substr(10, 2);
dd = personid.substr(12, 2);
}
var flag = true;
if (yy1 != "18" && yy1 != "19" && yy1 != "20") {
flag = false;
} else {
if (parseInt(mm, 10) < 1 || parseInt(mm, 10) > 12) {
flag = false;
} else {
if (parseInt(dd, 10) < 1 || parseInt(dd, 10) > 31) {
flag = false;
}
}
}
if (!flag) {
alert('身份证号码出生日期错误');
// 身份证号码出生日期错误
return false;
}


// 年,不能小于1900
if (Number(yyyy) < 1900) {
alert('年小于1900');
return false;
}


// var d=new
// Date(yyyy,mm,dd),year=d.getFullYear(),mon=d.getMonth(),day=d.getDate(),now=new
// Date();
var year = parseInt(yyyy, 10), mon = parseInt(mm, 10), day = parseInt(
dd, 10), now = new Date();


// 校验位
if (personid.length == 18) {
var vcode = personid.substr(17, 1);
if (vcode == "X") {
vcode = "x";
}
var arrVerifyCode = new Array("1", "0", "x", "9", "8", "7", "6",
"5", "4", "3", "2");
var wi = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8,
4, 2);
var totalmulAiWi = 0;
for (var i = 0; i < 17; i++) {
var num = parseInt(personid.substr(i, 1), 10);
totalmulAiWi = totalmulAiWi + num * wi[i];
}
var modValue = totalmulAiWi % 11;
if (vcode != arrVerifyCode[modValue]) {
alert('身份证号码校验错误');
// 身份证号码校验错误
return false;
}
}


// 年龄
if (year > now.getFullYear()) {
alert('身份证出生日期超出范围');
// 身份证出生日期超出范围
return false;
} else if (year == now.getFullYear()) {
if (mon > (now.getMonth() + 1)) {
alert('身份证出生日期超出范围');
// 身份证出生日期超出范围
return false;
} else if (mon == (now.getMonth() + 1)) {
if (day >= now.getDate()) {
alert('身份证出生日期超出范围');
// 身份证出生日期超出范围
return false;
}
}
}
var diffYear = now.getFullYear() - year;
var diffMonth = now.getMonth() + 1 - mon;
var diffDay = now.getDate() - day;
if (diffYear < 18 || diffYear === 18
&& (diffMonth < 0 || diffMonth === 0 && diffDay < 0)) {
alert('注册身份证信息未成年,该账号将被纳入防沉迷,随着游戏时间的增加收益将减少');
// 注册身份证信息未成年,该账号将被纳入防沉迷,随着游戏时间的增加收益将减少
checkAge = false;
return false;
}
alert('身份证输入正确');
// 身份证输入正确
return true;


} else {
alert('身份证号码位数不对,请输入15位或18位的身份证号码');
// 身份证号码位数不对,请输入15位或18位的身份证号码
return false;
}
}

猜你喜欢

转载自blog.csdn.net/qq_33817382/article/details/80251768