2015年1月15日 星期四
【JavaScript 】臺灣 身份證驗證
function gfcChkIdCard(pUserID) {
var tobjRtn = new Object(); //-傳回Object
var ixI;
var tAreaNo;
var tSum;
var tAreaCode;
var tSecondID; //身份證第二碼
if (pUserID == "" || pUserID == null) {
tobjRtn.eErr = false;
return tobjRtn;
}
tobjRtn.eErr = true;
pUserID = pUserID.toUpperCase();
if (pUserID.length != 10)//確定身份證字號有10碼
{
tobjRtn.eErrDesc = "輸入無效的身份證字號 (ex:資料長度錯誤) !";
return tobjRtn;
}
tAreaCode = pUserID.substr(0, 1);
if (tAreaCode.valueOf() < "A" || tAreaCode.valueOf() > "Z")//確定首碼在A-Z之間
{
tobjRtn.eErrDesc = "輸入無效的身份證字號 (ex:首碼應介於A-Z之間) !";
return tobjRtn;
}
if (isNaN(parseInt(pUserID.substring(1, 10), 10)) == true) //確定2-10碼是數字
{
tobjRtn.eErrDesc = "輸入無效的身份證字號 (ex:第2-10碼須是數字) !";
return tobjRtn;
}
//身份證號碼第 2 碼必須為 1 或 2
tSecondID = pUserID.substr(1, 1);
if (tSecondID != "1" && tSecondID != "2") {
tobjRtn.eErrDesc = "輸入無效的身份證字號 !";
return tobjRtn;
}
//取得首碼對應的區域碼,A ->10, B->11, ..H->17,I->34, J->18...
tAreaNo = "ABCDEFGHJKLMNPQRSTUVXYWZIO".search(tAreaCode) + 10;
pUserID = tAreaNo.toString(10) + pUserID.substring(1, 10);
// 取得CheckSum的值
// 核對身份證號碼是否正確
// A = 身份證號碼區域碼第 1碼
// A0 = 身份證號碼區域碼第 2碼 * (10 - 1)
// A1 = 身份證號碼第 2碼 * (10 - 2)
// A2 = 身份證號碼第 3碼 * (10 - 3)
// A3 = 身份證號碼第 4碼 * (10 - 4)
// A4 = 身份證號碼第 5碼 * (10 - 5)
// A5 = 身份證號碼第 6碼 * (10 - 6)
// A6 = 身份證號碼第 7碼 * (10 - 7)
// A7 = 身份證號碼第 8碼 * (10 - 8)
// A8 = 身份證號碼第 9碼 * (10 - 9)
// CheckSum = A + A0 + A1 + A2 + ........ + A7 + A8
tSum = parseInt(pUserID.substr(0, 1), 10) + parseInt(pUserID.substr(10, 1), 10);
for (ixI = 1; ixI <= 9; ixI++) {
tSum = tSum + parseInt(pUserID.substr(ixI, 1), 10) * (10 - ixI);
}
if ((tSum % 10) != 0) {
tobjRtn.eErrDesc = "輸入無效的身份證字號 !";
return tobjRtn;
}
tobjRtn.eErr = false;
return tobjRtn;
}
沒有留言:
張貼留言