Luhnアルゴリズム(ISO/IEC 7812-1)をVBAで

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

ABOUTこの記事をかいた人

はてなブックマークで驚愕の1600越えを記録した伝説が今明らかに! エクセル方眼紙 四天王の1人(ほぼ最弱)窓の杜大賞2014 大賞受賞! Excelを便利にする250以上の機能を体系化したアドインはこちらです。