2012年3月30日 星期五

使用JavaScript驗證身份證號碼及其原理

使用JavaScript驗證身份證號碼及其原理
文∕趙英傑
電子商務或者一般的會員註冊網站,經常需要使用身份證號碼驗證程式。身份證號碼有一定的組成規則,以台灣地區為例,首碼一定是英文字母,後面跟著代表性別的數字1或2,然後再銜接8個數字。A123456789是一個合格的身份證號碼,驗證原理如下圖所示:
底下是驗證此號碼是否合格的計算公式:
根據上圖的說明,我們可以用JavaScript的正規表達式(Regular Expression),加上簡易的字串與數學運算式,寫出如下的驗證函數:
JAVASCRIPT:
  1. function checkID(idStr){
  2.   // 依照字母的編號排列,存入陣列備用。
  3.   var letters = new Array('A''B''C''D',
  4.       'E''F''G''H''J''K''L''M',
  5.       'N''P''Q''R''S''T''U''V',
  6.       'X''Y''W''Z''I''O');
  7.   // 儲存各個乘數
  8.   var multiply = new Array(198765,
  9.                            4321);
  10.   var nums = new Array(2);
  11.   var firstChar;
  12.   var firstNum;
  13.   var lastNum;
  14.   var total = 0;
  15.   // 撰寫「正規表達式」。第一個字為英文字母,
  16.   // 第二個字為1或2,後面跟著8個數字,不分大小寫。
  17.   var regExpID=/^[a-z](1|2)\d{8}$/i;
  18.   // 使用「正規表達式」檢驗格式
  19.   if (idStr.search(regExpID)==-1) {
  20.     // 基本格式錯誤
  21.     alert(\"請仔細填寫身份證號碼\");
  22.    return false;
  23.   } else {
  24.     // 取出第一個字元和最後一個數字。
  25.     firstChar = idStr.charAt(0).toUpperCase();
  26.     lastNum = idStr.charAt(9);
  27.   }
  28.   // 找出第一個字母對應的數字,並轉換成兩位數數字。
  29.   for (var i=0; i<26; i++) {
  30.     if (firstChar == letters[i]) {
  31.       firstNum = i + 10;
  32.       nums[0] = Math.floor(firstNum / 10);
  33.       nums[1] = firstNum - (nums[0] * 10);
  34.       break;
  35.     }
  36.   }
  37.   // 執行加總計算
  38.   for(var i=0; i<multiply.length; i++){
  39.     if (i<2) {
  40.       total += nums[i] * multiply[i];
  41.     } else {
  42.       total += parseInt(idStr.charAt(i-1)) *
  43.                multiply[i];
  44.     }
  45.   }
  46.   // 和最後一個數字比對
  47.   if ((10 - (total % 10))!= lastNum) {
  48.     alert(\"身份證號碼寫錯了!\");
  49.     return false;
  50.   }
  51.   return true;
  52. }
文章轉載於:http://swf.com.tw/?p=94

沒有留言:

張貼留言