﻿//檢查身分證字號
function ValidatePersonID(source, arguments)
{
    var s = arguments.Value.toUpperCase();
    arguments.IsValid = !gfcChkIdCard(s).eErr;
}
//=============================================================================
//=   功能說明: 編審身份證字號是否正確
//=   傳入參數: pUserID : 要編審的號碼(身份證字號:10位文數字)
//=   傳回參數: 物件    : eErr           表編審成功/失敗
//=                       eErrDesc       編審失敗錯誤訊息
//=============================================================================
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;
}


