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
Reacties