1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
function checkID(idStr){ var debug = true; // 依照字母的編號排列,存入陣列備用。 var letters = new Array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'X', 'Y', 'W', 'Z', 'I', 'O'); // 儲存各個乘數 var multiply = new Array(1, 9, 8, 7, 6, 5, 4, 3, 2, 1); var nums = new Array(2); var firstChar; var firstNum; var lastNum; var total = 0; // 撰寫「正規表達式」。第一個字為英文字母, // 第二個字為1或2,後面跟著8個數字,不分大小寫。 var regExpID=/^[a-z](1|2)\d{8}$/i; // 使用「正規表達式」檢驗格式 var result = idStr.match(regExpID); if(debug) console.log(result); if (result == null) { // 基本格式錯誤 if(debug) console.log('基本格式錯誤'); return false; } else { // 取出第一個字元和最後一個數字。 firstChar = idStr.charAt(0).toUpperCase(); lastNum = idStr.charAt(9); } // 找出第一個字母對應的數字,並轉換成兩位數數字。 for (var i=0; i<26; i++) { if (firstChar == letters[i]) { firstNum = i + 10; nums[0] = Math.floor(firstNum / 10); nums[1] = firstNum - (nums[0] * 10); break; } } // 執行加總計算 for(var i=0; i<multiply.length; i++){ if (i<2) { total += nums[i] * multiply[i]; } else { total += parseInt(idStr.charAt(i-1)) * multiply[i]; } } // 和最後一個數字比對 if ((10 - (total % 10))!= lastNum) { if(debug) console.log('和最後一個數字比對'); return false; } return true; } function f2h(val){ var value = val || ""; var result = ""; if (value) { for (i = 0; i < value.length; i++) { if (value.charCodeAt(i) == 12288) { //console.log(value.charCodeAt(i)); result += " "; } else { //console.log(i + ': ' + value.charCodeAt(i)); if (value.charCodeAt(i) > 65280 && value.charCodeAt(i) < 65375) { result += String.fromCharCode(value.charCodeAt(i) - 65248); } else { result += String.fromCharCode(value.charCodeAt(i)); } //console.log(i + ': ' + result); } } } return result; } |