Search code examples
databasems-accessluhn

Apply Lunh algorithm in access


Someone know about how can I apply the Lahn algorithm in access, for verify the reference number with the phone number


Solution

  • This function will calculate the check digit for you:

    Public Function Modulus1x(ByVal strNum As String, ByVal intModulus As Integer) As Integer
    
        ' Creates the Modulus-10 or -11 check digit for strNum.
        ' Non-numeric characters are ignored.
    
        ' Maximum length of number.
        Const cintNumLenMax = 31
    
        Dim strTmp    As String
        Dim intChr    As Integer
        Dim intLen    As Integer
        Dim intSum    As Integer
        Dim intVal    As Integer
        Dim intWeight As Integer
        Dim intCount  As Integer
        Dim intChk    As Integer
    
        Select Case intModulus
          Case 10, 11
            intLen = Len(strNum)
            If intLen > 0 Then
              ' Remove non-numeric characters.
              For intCount = 1 To intLen
                intChr = Asc(Mid(strNum, intCount))
                If intChr >= 48 And intChr <= 57 Then
                  strTmp = strTmp & Chr(intChr)
                End If
              Next intCount
              strNum = strTmp
              intLen = Len(strNum)
    
              If intLen > 0 Then
                ' Calculate check digit.
                If intLen <= cintNumLenMax Then
                  For intCount = 1 To intLen 
                    intVal = Val(Mid(strNum, intLen - intCount + 1, 1))
                    Select Case intModulus
                      Case 10
                        intWeight = 1 + (intCount Mod 2)
                        intVal = intWeight * intVal
                        intVal = Int(intVal / 10) + (intVal Mod 10)
                      Case 11
                        intWeight = 2 + ((intCount - 1) Mod 6)
                        intVal = intWeight * intVal
                    End Select
                    intSum = intSum + intVal
                  Next intCount
                  intChk = -Int(-intSum / intModulus) * intModulus - intSum
                End If
              End If
            End If
        End Select
    
        Modulus1x = intChk
    
    End Function
    

    Just pass the phone number:

    PhoneNumber = "+01234568790"
    CheckDigit = Modulus1x(PhoneNumber, 10)
    
    PhoneNumberWithCheckDigit = PhoneNumber & CheckDigit
    

    And with the function here: Modulus Check

    you can validate a PhoneNumberWithCheckDigit