首頁 Home > 線上問答 Q & A > 技術分享 > 身份證字號檢查程式 - JavaScript
發表主題 回覆文章
 
PK
聯絡信箱 造訪網站

身份證字號檢查程式 - JavaScript


Views : 5721

最近為了配合 客戶的需求

閒來無事,也寫了一支 JavaScript 的 身份證字號檢查程式

在此分享給有興趣的朋友..

如果覺得還不錯的話,就給個回應囉 ~ ^^

身份證字號檢查程式 - JavaScript 



/*
身份證字號檢查程式 ======================================================= P.K.  2009/2/6
歡迎下載使用於非營業用途
並且請勿移除本版權宣告
http://www.pkweb.idv.tw/

英文代號 - X
       A=10  台北市       J=18 新竹縣         S=26  高雄縣
       B=11  台中市       K=19 苗栗縣         T=27  屏東縣
       C=12  基隆市       L=20 台中縣         U=28  花蓮縣
       D=13  台南市       M=21 南投縣         V=29  台東縣
       E=14  高雄市       N=22 彰化縣         W=32  金門縣
       F=15  台北縣       O=35 新竹市         X=30  澎湖縣
       G=16  宜蘭縣       P=23 雲林縣         Y=31  陽明山
       H=17  桃園縣       Q=24 嘉義縣         Z=33  連江縣
       I=34  嘉義市       R=25 台南縣

性別 - D1
1 - 男性
2 - 女性

Y = X1 + 9*X2 + 8*D1 + 7*D2 + 6*D3 + 5*D4 + 4*D5 + 3*D6 + 2*D7+ 1*D8 + D9
如 Y 能被 10 整除,則表示該身分證號碼為正確,否則為錯誤。
*/
function checkIDNO(form){
 re = /^[ABCDEFGHJKLMNPQRSTUVXYWZIO]{1}[12]{1}\d{8}$/;
 
 //開頭字母
 var pattens = 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 tables = 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);
 //form值
 var formStr = form.value;
 
 //計算開頭字母的值: 十位數字 + 個位數字*9
 var firChar = formStr.substr(0,1);
 var firCharNum = 0;
 var firCharValue = 0;
 
 for (var i=0;i<=25;i++){
  if (pattens[i] == firChar){
   firCharNum = tables[i];
   break;
  }
 }
 
 firCharValue = parseInt(firCharNum.toString().substr(0,1)) + parseInt(firCharNum.toString().substr(1,2))*9;
 
 //計算性別的值
 var SexValue = parseInt(formStr.substr(1,1))*8;
 
 //計算後七碼的值
 var numCount = 0;
 for (var i=2;i<=8;i++){
  numCount += parseInt(formStr.substr(i,1))*(9-i);
  //document.write(formStr.substr(i,1) + " * " + (9-i) + " = " + (parseInt(formStr.substr(i,1))*(9-i)) + "
");
 }
 
 //計算檢查碼的值
 var lastChar = formStr.substr(formStr.length-1,1);
 var chkNum = 10 - ((firCharValue + SexValue + numCount)%10);
 if (chkNum == 10) chkNum = 0;
 
 //判斷是否正確
 var isTrue = "0";
 var totalValue = firCharValue + SexValue + numCount + parseInt(lastChar);
 if (parseInt(lastChar) == chkNum && totalValue%10 == 0) isTrue = "1";

 if (re.test(formStr) && isTrue == "1" && formStr != "A123456789"){
  return true
 }else{
  return false
 }
 
}

2/6/2009 5:14:22 PM

-- 目前沒有任何回覆 --
回到上方