Luhnアルゴリズム(ISO/IEC 7812-1)
うちのサイトで結構検索されるキーワードに「EXCEL LUHN」という言葉があります。
クレジットカードや口座番号のチェックに使われるチェックデジットですね。
実装内容はこちらです。なおバグがあっても当方の関知することではありませんが
バグってたら教えてね。
引数のクレジットカード番号を渡して、正しい番号であれば True 誤りであれば False を返します。
途中に、rlxIsNumber という関数がありますが数値チェックをしています。
'--------------------------------------------------------------
' Luhnアルゴリズム(ISO/IEC 7812-1)
' クレジットカード番号のチェック
'--------------------------------------------------------------
Function rlxIsLuhn(ByVal strNo As String) As Boolean
Dim lngLen As Long
Dim lngOdd As Long
Dim lngEvn As Long
Dim i As Long
Dim lngAns As Long
Dim strCheckDigit As String
lngLen = Len(strNo)
lngOdd = 0
lngEvn = 0
If lngLen < 2 Then
rlxIsLuhn = False
Exit Function
End If
If rlxIsNumber(strNo) Then
Else
rlxIsLuhn = False
Exit Function
End If
For i = 1 To lngLen
If (i Mod 2) = 1 Then
'奇数桁のみを加算(チェックディジットを除く)
lngOdd = lngOdd + Val(Mid$(strNo, lngLen - i + 1, 1))
Else
'偶数桁のみを加算
Dim lngWork As Long
lngWork = Val(Mid$(strNo, lngLen - i + 1, 1)) * 2
lngEvn = lngEvn + Fix(lngWork / 10) + lngWork Mod 10
End If
Next
lngAns = (lngOdd + lngEvn) Mod 10
If lngAns = 0 Then
rlxIsLuhn = True
Else
rlxIsLuhn = False
End If
End Function









最近のコメント