張貼者:2010年5月29日 上午6:31Administrator ExcelHelp
[
已更新 2010年5月29日 上午6:32
]
這裡介紹兩個關於信用卡號碼的函數,兩個函數一併使用,就可以決定一個信用卡號碼是否正確。當然,這個範例對初學巨集的人也是一個很好的練習。
Luhn算式 首先介紹一個叫Luhn的算式,它可以決定一系列的數字是否正確。 算法很蠻簡單,從右到左,把單數數位(如個位、百位等)的數值則可以直接累計起來;雙數數數位(如十位、千位)的數值則乘2,如大於9則減9,然後把得出的數字累計起來;。最後累計得來的數值如果是10的倍數,信用卡號碼則為正確。 用6528做個例子:  由於累計數20是10的倍數,也就是說可以給10除盡,故此6528這個數字是符合Luhn算式的。
語法:
' 信用卡號碼是否正確 Function IsValidCreditCardNo(sCreditCard As String) As Boolean Dim iCardNoLen As Integer ' 信用卡號碼長度 Dim iSum As Integer ' 累計用 Dim i As Integer Dim iTemp As Integer ' 起始化 iCardNoLen = Len(sCreditCard) ' 信用卡號碼長度 iSum = 0 ' 用作累計的變數 ' 單數(由右至左)的數位直接加到累計 For i = iCardNoLen To 1 Step -2 iSum = iSum + Mid(sCreditCard, i, 1) Next i ' 雙數(由右至左)的數位乘2後,如大於9則減9,然後加到累計 For i = iCardNoLen - 1 To 1 Step -2 iTemp = Mid(sCreditCard, i, 1) * 2 iSum = iSum + iTemp - IIf(iTemp > 9, 9, 0) Next i ' 如果累計數是10的倍數,則輸入的卡號則為正確 IsValidCreditCardNo = (iSum Mod 10 = 0) End Function |
|
當然,我們知道這四個數字不可能是個信用卡號碼,故此我們需要另外一個函數。
信用卡的種類 下表列出較流行信用卡的種類,以及開首號碼與號碼長度。 
這個函數要寫得簡單,必須知道 Like 的用法,以下是偵測JCB的寫法:
' JCB If (sCreditCard Like "3*" And iCardNoLen = 16) Or _ ((sCreditCard Like "2131*" Or sCreditCard Like "1800*") And _ iCardNoLen = 15) Then CreditCardType = "JCB" End If
注意地方:
- 在計算Luhn函數時,人一般會一個數字一個數字順序計算,但寫程序時,首先整批處理單位數字,然後才整批處理雙位數字,這樣會較簡潔。
- 在Luhn函數裡,不要這樣寫:
If iSum Mod 10 = 0 Then IsValidCreditCardNo = True Else IsValidCreditCardNo = False End If
這樣寫又簡單,又清楚: IsValidCreditCardNo = (iSum Mod 10 = 0)
- 編寫帶有「和 AND」和「或 OR」的條件時,請看清楚括號是否正確,記著:AND的處理優先權比OR高。
- 不要以為輸入一個正確的信用卡號碼就可以在網上騙財!第一,受款公司可能直接連到信用卡公司,不存在的號碼原形畢露;第二,受款公司一定會記錄你付款的時間與當時候你的IP地址,要追查並不困難。
|
|
|
|
|
 Updating...
Administrator ExcelHelp, 2010年5月29日 上午6:32
|