close

//新版-更新檢查碼問題-20091125

function checkID2(idStr){
  // 依照字母的編號排列,存入陣列備用。
  var letters = new Array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
      'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
      'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
      'Y', 'Z');

//這是每個英文代碼對應的數字。
  var lettervalue = new Array(10, 11, 12, 13, 14, 15, 16, 17,
      34, 18, 19, 20, 21, 22, 35, 23,
      24, 25, 26, 27, 28, 29, 32, 30,
      31, 33
)
  // 儲存各個乘數
  var multiply = new Array(0, 8, 7, 6, 5, 4, 3, 2, 1,0);
  var nums = new Array(2);
  var firstChar;
  var firstNum;
  var lastNum;
  var lvalue;
  var total = 0;
  // 撰寫「正規表達式」。第一個字為英文字母,
  // 第二個字為1或2,後面跟著8個數字,不分大小寫。
  var regExpID=/^[A-Z](1|2)\d{8}$/i;
  // 使用「正規表達式」檢驗格式
  if (idStr.search(regExpID)==-1) {
    // 基本格式錯誤
 alert("請仔細填寫身份證號碼");
   return false;
  } else {
 // 取出第一個字元和最後一個數字。
 firstChar = idStr.charAt(0).toUpperCase();
 lastNum = idStr.charAt(9);
  }
  // 找出第一個字母對應的數字,並計算數字:整數+個位數*9。
  for (var i=0; i<26; i++) {
 if (firstChar == letters[i]) {
  firstNum = lettervalue[i].valueOf();
  firstNum = Math.floor(firstNum/10)+(firstNum%10*9);
   break;
 }
  }
  //計算1~8位數的數值
  for(var n=1; n<=8; n++){
   total = total + idStr.charAt(n).valueOf() * multiply[n].valueOf();
  }

 //加上英文字的數值
  total = total + firstNum;

//檢查是否與(10-身份證第十位數字)相同
  if((total%10).valueOf() != ((10 - idStr.charAt(9).valueOf())%10)){
   alert("身份證號碼寫錯了!");
 return false;
  }
 
  return true;
}

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 路西法 的頭像
    路西法

    路西法之天使聖殿

    路西法 發表在 痞客邦 留言(0) 人氣()