最近為了配合 客戶的需求 閒來無事,也寫了一支 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 } } |