日期:2014-05-18  浏览次数:20750 次

有没有谁有15位身份证验证的方法?
18位的可以根据最后一位的校验码的正误来判断,但15位的没有校验码,不知道有没办法来解决?

------解决方案--------------------
身份证校验最好写在前台程序中。如下面js代码
==================================================================
功能:验证身份证号码是否有效
提示信息:未输入或输入身份证号不正确!
使用:isIDno(obj,string)
返回:bool
==================================================================
*/
function isIDno(obj,ShowMsg)
{
var show = IfShow(ShowMsg);

//aCity={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 aCity = "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 iSum = 0;
var info = " ";
var idCardLength = obj.value.length;

if(!/^\d{17}(\d|x)$/i.test(obj.value)&&!/^\d{15}$/i.test(obj.value))
{
if (show) alert(ShowMsg);
obj.focus();
obj.select();
return false;
}

//在后面的运算中x相当于数字10,所以转换成a
obj.value = obj.value.replace(/x$/i, "a ");

var curCity = obj.value.substr(0,2); if(!(aCity.indexOf(curCity) > 0) )
{
if (show) alert(ShowMsg);
obj.focus();
obj.select();
return false;
} if (idCardLength==18)
{


sBirthday=obj.value.substr(6,4)+ "- "+Number(obj.value.substr(10,2))+ "- "+Number(obj.value.subs

tr(12,2));
var d = new Date(sBirthday.replace(/-/g, "/ "))
if(sBirthday!=(d.getFullYear()+ "- "+ (d.getMonth()+1) + "- " + d.getDate()))
{
if (show)
alert(ShowMsg);
obj.focus();
obj.select();
return false;
}

for(var i = 17;i> =0;i --)
iSum += (Math.pow(2,i) % 11) * parseInt(obj.value.charAt(17 - i),11);

if(iSum%11!=1)
{
if (show)
alert(ShowMsg);
obj.focus();
obj.select();
return false;
}

}
else if (idCardLength==15)
{
sBirthday = "19 " + obj.value.substr(6,2) + "- " + Number(obj.value.substr(8,2)) + "- " +

Number(obj.value.substr(10,2));
var d = new Date(sBirthday.replace(/-/g, "/ "))
var dd = d.getFullYear().toString() + "- " + (d.getMonth()+1) + "- " + d.getDate();

if(sBirthday != dd)
{
if (show)
alert(ShowMsg);
obj.focus();
obj.select();
return false;
}
}
return true;
}
/*