string msg, in_lid, ls_check_code, result
long ll_engid, ll_engid01, ll_count

in_lid = UPPER(String(Left(ls_lid,1))) //取出第一位英文字母,利用 Upper 函數轉為大寫

ll_engid = Pos("ABCDEFGHJKLMNPQRSTUVXYWZIO",in_lid) + 9 // POS函數,計算取出的字母在第幾個位置,加9得出各代表的計算數字

ll_count = long(Left(string(ll_engid),1))*1 + long(Right(string(ll_engid),1))*9 //英文字母轉成兩位字串,第一位值 *1,第二位值 *9

CHOOSE CASE Mid(ls_lid,2,1) //輸入的第二碼如果是1,2=>身分證; A,B,C,D=>居留證
   CASE "1","2"
  ll_count = ll_count + long(mid(ls_lid,2,1))*8 //身分證直接將值 *8
   CASE "A","B","C","D","a","b","c","d"
  ll_engid01 = Pos("ABCD",UPPER(Mid(ls_lid,2,1))) + 9  //居留證:將A,B,C,D轉換成相對應的數字
  ll_count = ll_count + long(Right(string(ll_engid01),1))*8 //居留證,轉出的數字,取出個位數,再將數值 *8
END CHOOSE

ll_count = ll_count + long(mid(ls_lid,3,1))*7 + long(mid(ls_lid,4,1))*6 + long(mid(ls_lid,5,1))*5  //輸入的3-5位字元,各乘上 7,6,5
ll_count = ll_count + long(mid(ls_lid,6,1))*4 + long(mid(ls_lid,7,1))*3 + long(mid(ls_lid,8,1))*2 + long(mid(ls_lid,9,1))*1 //輸入的6-9位字元,各乘上 4,3,2,1

IF Len(ls_lid) = 10 THEN  //輸入的第十位為檢查碼
   ls_check_code =String(Mid(ls_lid,10,1))
END IF

IF Mod(ll_count,10) = 0 AND long(ls_check_code) = 0 THEN //計算出的1-9位和,如果除以 10 的餘數為0,且檢查碼為0,則輸入的資料正確
   result = "OK"
ELSE
 IF 10 - Mod(ll_count,10) = long(ls_check_code) Then  //如果餘數不為0,且與檢查碼相等,則輸入的資料正確
    result = "OK"
   ELSE  //餘數不為0,且與檢查碼不符
    result = "err"
   END IF
END IF

IF result = "OK" THEN
 msg = "OK"
ELSE
 msg = "err"
END IF

//msg 為傳回的值,為文字型態
RETURN msg

arrow
arrow
    全站熱搜

    skyfoxmis 發表在 痞客邦 留言(0) 人氣()