dinsdag 1 oktober 2013

Excel VBA functie voor de 11 proef

Controleren van burgerservicenummer

Dit nummer moet voldoen aan de zogenaamde 11-proef. Als we het burgerservicenummer voorstellen door de reeks ABCDEFGHI, dan moet: (9 x A) + (8 x B) + (7 x C) + (6 x D) + (5 x E) + (4 x F) + (3 x G) + (2 x H) - (1 x I) een veelvoud van 11 zijn. We kunnen met deze combinatie bijna 91 miljoen nummers cre√ęeren. Geldige voorbeelden zijn: 111222333 en 123456782.

We gaan dit uitwerken in een procedure:

  Function bsn(bsnummer As String) As String
    Dim intT As Integer, intTotaal As Integer

    If Len(bsnummer) <> 9 Then
      bsn = "mispoes: korter dan 9"
      'verlaat de functie
      Exit Function
    Else
     For intT = 1 To Len(bsnummer)
        'met Mid kun je bepalen waar in de string je wilt beginnen en welk
        'deel je kiest
         If Not IsNumeric(Mid(bsnummer, intT, 1)) Then
           bsn = "mispoes: zit een letter in"
           Exit Function
         End If
      Next

      For intT = Len(bsnummer) To 1 Step -1
         If intT = 1 Then
           intTotaal = intTotaal + Mid(bsnummer, 10 - intT, 1) * - intT
         Else
           intTotaal = intTotaal + Mid(bsnummer, 10 - intT, 1) * intT
         End If
      Next

      If intTotaal Mod 11 = 0 Then
         bsn = "bingo"
      Else
         bsn = "goed fout"
      End If
    End If
  End Function

Voor controle op banknummer geldt nagenoeg hetzelfde:
Dan geldt (9 x A) + (8 x B) + (7 x C) + (6 x D) + (5 x E) + (4 x F) + (3 x G) + (2 x H) + (1 x I) is deelbaar door 11. Zelf heb ik dit gemaakt voor een Access applicatie:

Public Function ElfProef(Rekening As String) As Boolean
    Dim i As Integer, iR As Boolean, iTest As Integer, iRest As Integer

    If Len(Nz(Rekening, "")) < 9 Or Len(Nz(Rekening, "")) > 10 Then
        ElfProef = False
        Exit Function
    End If
    
    If Len(Nz(Rekening, "")) = 9 Then iR = True
    
    If iR = True Then
        For i = 9 To 1 Step -1
            iTest = iTest + (i * Val(Mid(Rekening, (10 - i), 1)))
        Next i
    Else
        For i = 1 To 10
           iTest = iTest + (i * Val(Mid(Rekening, i, 1)))
        Next i
    End If
    
    iRest = iTest Mod 11
    If iRest = 0 Then
        ElfProef = True
    Else
        ElfProef = False
    End If
End Function


Voor verder Excel tips klik hier.
Een reactie plaatsen