public static char doVerify(String id)
{
char pszSrc[]=id.toCharArray();
int iS = 0;
int iW[]={7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
char szVerCode[] = new char[]{'1','0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'};
int i;
for(i=0;i<17;i++)
{
iS += (int)(pszSrc[i]-'0') * iW[i];
}
int iY = iS%11;
return szVerCode[iY];
}
{
char pszSrc[]=id.toCharArray();
int iS = 0;
int iW[]={7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
char szVerCode[] = new char[]{'1','0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'};
int i;
for(i=0;i<17;i++)
{
iS += (int)(pszSrc[i]-'0') * iW[i];
}
int iY = iS%11;
return szVerCode[iY];
}
var parityBit=new Array("1","0","X","9","8","7","6","5","4","3","2");
var sex="male";
//校验身份证号码的主调用
function validId(obj){
var _id=obj.value;
if(_id=="")return;
_id=_id.replace("x","X");
obj.value=_id;
var _valid=false;
if(_id.length==15){
_valid=validId15(_id);
}else if(_id.length==18){
_valid=validId18(_id);
}
return _valid;
}
//校验18位的身份证号码
function validId18(_id){
_id=_id+"";
var _num=_id.substr(0,17);
var _parityBit=_id.substr(17);
var _power=0;
for(var i=0;i< 17;i++){
//校验每一位的合法性
if(_num.charAt(i)<'0'||_num.charAt(i)>'9'){
return false;
break;
}else{
//加权
_power+=parseInt(_num.charAt(i))*parseInt(powers[i]);
//设置性别
if(i==16&&parseInt(_num.charAt(i))%2==0){
sex="female";
}else{
sex="male";
}
}
}
//取模
var mod=parseInt(_power)%11;
if(parityBit[mod]==_parityBit){
return true;
}
return false;
}
//校验15位的身份证号码
function validId15(_id){
_id=_id+"";
for(var i=0;i<_id.length;i++){
//校验每一位的合法性
if(_id.charAt(i)<'0'||_id.charAt(i)>'9'){
return false;
break;
}
}
var year=_id.substr(6,2);
var month=_id.substr(8,2);
var day=_id.substr(10,2);
var sexBit=_id.substr(14);
//校验年份位
if(year<'01'||year >'90')return false;
//校验月份
if(month<'01'||month >'12')return false;
//校验日
if(day<'01'||day >'31')return false;
//设置性别
if(sexBit%2==0){
sex="female";
}else{
sex="male";
}
return true;
}
调用时例如<input type="text" id="sfzhm" name="sfzhm" >
function checked(){
var sfzhmObj=document.getElementById("sfzhm");
if(!validId(sfzhmObj)){
alert("身份证错误!");
return;
}
form1.submit();
}
前1、2位数字表示:所在省份的代码;
第3、4位数字表示:所在城市的代码;
第5、6位数字表示:所在区县的代码;
第7~14位数字表示:出生年、月、日;
第15、16位数字表示:所在地的派出所的代码;
第17位数字表示性别:奇数表示男性,偶数表示女性;
第18位数字是校检码:也有的说是个人信息码,一般由计算机随机产生,用来检验身份证的正确性。
校检码可以是0~9的数字,有时也用x表示。
除最后一位外都是数字,最后一位若是字母只能是小写x。
第7~14位应该是yyyymmdd格式且能表示合法的日期,而且公民要到指定年龄才会有身份证,如有必要还要考虑生日和年龄是否相符。
如果单从格式上考虑应该很简单,但要详细分析省市区代码是否合法,生日与年龄是否对应就得另外写分析算法了。