1. 程式人生 > >對身份證號碼合法性的驗證

對身份證號碼合法性的驗證

對於身份證號碼,經常有人只是判斷身份證的位數是否為15或18位,是否全部都是數字,這種判斷是錯誤的,因為18位身份證號碼允許最後一位為X,不過必須根據特定的演算法(最後一位為驗證碼),下面這段程式碼就是判斷身份證號碼是否合法的。
<script language="JavaScript">
function CheckAvailable(){
//獲得所輸入的身份證號碼的值
var idcardno = document.AgtmngStaffForm.idcardno.value;

//判斷身份證是否為15位或者18位,其中isNumber函式是判斷值是否全部是數字,這裡就不給出了
if ((idcardno == "")||(!(isNumber(idcardno))&&(idcardno.length == 15))||
         ((idcardno.length != 15)&&(idcardno.length != 18)))
{
    alert("身份證號碼應是15或18位數字,請輸入正確!");

    //將滑鼠的焦點定位到身份證那個輸入框中
    document.AgtmngStaffForm.idcardno.focus();
    return false;
}
else if (idcardno.length == 18)
{//對18位身份證的判斷,18位允許最後一位為X,不過必須根據特定的演算法
    var Wi = new Array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1);
 var Ai = new Array('1','0','X','9','8','7','6','5','4','3','2');
 
 if (idcardno.charAt(17) == 'x')
 {
  idcardno = idcardno.replace("x","X"); 
  document.AgtmngStaffForm.idcardno.value = idcardno;       
 }
 
 var checkDigit = idcardno.charAt(17);  
 var cardNoSum = 0;
     
 for (var i=0; i<idcardno.length-1; i++)
 {
  cardNoSum = cardNoSum + idcardno.charAt(i)*Wi[i];
    }

 var seq = cardNoSum%11;
 var getCheckDigit = Ai[seq];
 
 if (checkDigit != getCheckDigit)
 {
  alert("您的身份證號碼輸入有誤!");
  document.AgtmngStaffForm.idcardno.focus();
  return false;
 }    
 return true;

else
{
    return true;
}
}
</script>