//新版-更新檢查碼問題-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;
}
留言列表