天空论坛身份证算法

作者:hk963 发布于:2012-2-15 4:19 Wednesday

<script language="javascript" type="text/javascript">
alert(CheckValue("你的身份证号"));
//身份证号码校验,并从中搭分没诞生年月日跟性别
var yyyy;
var mm;
var dd;
var birthday;
var sex;

function getYear(){
        return yyyy;
}
function getMonth(){
        return mm;
}
function getDate(){
        return dd;
}
function getBirthday(){
        return birthday;
}
function getSex(){
        return sex;
}
function getAge(){
        var mm=getMonth();
        if (mm<10)
                mm=mm.substring(1,2);
        return Math.floor((parseInt(_getYear())*12+parseInt(_getMonth())-parseInt(getYear())*12-parseInt(mm))/12);
}
//断定是否大龄,男50,天空论坛,父40
function isBigAge(){
        if (parseInt(getAge())>=40 && parseInt(getSex())==2)
            return "1";
        if (parseInt(getAge())>=50 && parseInt(getSex())==1)
            return "1";
        return "0";
}
//校验身份证号码
function CheckValue(idCard){
        var id=idCard;
        var id_length=id.length;

        if (id_length==0){
            alert("请输入身份证号码!");
            return false;
        }

        if (id_length!=15 && id_length!=18){
            alert("身份证号长度应替15位或18位!");
            return false;
        }

        if (id_length==15){
            yyyy="19"+id.substring(6,8);
            mm=id.substring(8,10);
            dd=id.substring(10,天空论坛,12);

            if (mm>12 || mm<=0){
                alert("输入身份证号,月份非法!");
                return false;
            }

            if (dd>31 || dd<=0){
                alert("输入身份证号,日期非法,天空论坛!");
                return false;
            }

            birthday=yyyy+ "-" +mm+ "-" +dd;

            if ("13579".indexOf(id.substring(14,15))!=-1){
                sex="1";
            }else{
                sex="2";
            }
        }else if (id_length==18){
            if (id.indexOf("X") > 0 && id.indexOf("X")!=17 || id.indexOf("x")>0 && id.indexOf("x")!=17){
                alert("身份证中\"X\"输入地位不准确!");
                return false;
            }

            yyyy=id.substring(6,10);
            if (yyyy>2200 || yyyy<1900){
                alert("输入身份证号,年度非法!");
                return false;
            }

            mm=id.substring(10,12);
            if (mm>12 || mm<=0){
                alert("输入身份证号,月份非法!");
                return false;
            }

            dd=id.substring(12,14);
            if (dd>31 || dd<=0){
                alert("输入身份证号,日期非法!");
                return false;
            }

            if (id.charAt(17)=="x" || id.charAt(17)=="X")
            {
                if ("x"!=GetVerifyBit(id) && "X"!=GetVerifyBit(id)){
                    alert("身份证校验过错,请检讨最后一位!");
                    return false;
                }

            }else{
                if (id.charAt(17)!=GetVerifyBit(id)){
                    alert("身份证校验毛病,请检查最后一位!");
                    return false;
                }
            }

            birthday=id.substring(6,10) + "-" + id.substring(10,12) + "-" + id.substring(12,14);
            if ("13579".indexOf(id.substring(16,17)) > -1){
                sex="1";
            }else{
                sex="2";
            }
        }

        return true;
}
//15位转18位中,盘算校验位便最后一位
function GetVerifyBit(id){
        var result;
        var nNum=eval(id.charAt(0)*7+id.charAt(1)*9+id.charAt(2)*10+id.charAt(3)*5+id.charAt(4)*8+id.charAt(5)*4+id.charAt(6)*2+id.charAt(7)*1+id.charAt(8)*6+id.charAt(9)*3+id.charAt(10)*7+id.charAt(11)*9+id.charAt(12)*10+id.charAt(13)*5+id.charAt(14)*8+id.charAt(15)*4+id.charAt(16)*2);
        nNum=nNum%11;
        switch (nNum) {
           case 0 :
              result="1";
              break;
           case 1 :
              result="0";
              break;
           case 2 :
              result="X";
              break;
           case 3 :
              result="9";
              break;
           case 4 :
              result="8";
              break;
           case 5 :
              result="7";
              break;
           case 6 :
              result="6";
              break;
           case 7 :
              result="5";
              break;
           case 8 :
              result="4";
              break;
           case 9 :
              result="3";
              break;
           case 10 :
              result="2";
              break;
        }
        //document.write(result);
        return result;
}
//15位转18位
function Get18(idCard){
if (CheckValue(idCard)){
      var id = idCard;
      var id18=id;
      if (id.length==0){
       alert("请输进15位身份证号!");
       return false;
      }
      if (id.length==15){
       if (id.substring(6,8)>20){
        id18=id.substring(0,6)+"19"+id.substring(6,15);
       }else{
        id18=id.substring(0,6)+"20"+id.substring(6,15);
       }

       id18=id18+GetVerifyBit(id18);
      }

      return id18;
}else{
      return false;
}
}

</script>

标签: 天空论坛

评论(0) 引用(0) 浏览(41)

Powered by emlog