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];
    }   

解决方案 »

  1.   

    var powers=new Array("7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2");
    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();
    }
      

  2.   

    正则表达式可以,身份证号码各位含义如下:
                                                                                     
    前1、2位数字表示:所在省份的代码;
    第3、4位数字表示:所在城市的代码;
    第5、6位数字表示:所在区县的代码;
    第7~14位数字表示:出生年、月、日;
    第15、16位数字表示:所在地的派出所的代码;
    第17位数字表示性别:奇数表示男性,偶数表示女性;
    第18位数字是校检码:也有的说是个人信息码,一般由计算机随机产生,用来检验身份证的正确性。
    校检码可以是0~9的数字,有时也用x表示。
    除最后一位外都是数字,最后一位若是字母只能是小写x。
    第7~14位应该是yyyymmdd格式且能表示合法的日期,而且公民要到指定年龄才会有身份证,如有必要还要考虑生日和年龄是否相符。
                                                                                     
    如果单从格式上考虑应该很简单,但要详细分析省市区代码是否合法,生日与年龄是否对应就得另外写分析算法了。
      

  3.   

    魔龙国际手机网络游戏引擎开发小组,寻找服务器端开发伙伴。薪水待遇10K以上。有兴趣的加我QQ:376313600 或者发邮件到 [email protected]