Valideer een Burger Service Nummer (BSN)

Dit is een reeds eerder gepubliceerde post van de vorige VBcentral website door André Obelink.
In het VBcentral forum verscheen de vraag of er code voorhanden was om BTW-nummers voor de verschillende landen te controleren. Hier zijn een aantal suggesties aan de hand gedaan om met behulp van bijvoorbeeld regular expressies de invoer te valideren. 
Wat deze codes doen is feitelijk pattern-matching. Indien het ingevoerde BTW-nummer voldoet aan het opgegeven patroon, dan wordt deze als valide beschouwd. De code wordt echter niet inhoudelijk gecontroleerd. Voor Nederlandse BTW-nummers is namelijk niet elke combinatie geldig. 
Het BTW nummer begint met de tweeletterige landaanduiding: 'NL'. Dan volgt een nummer bestaande uit 8 of 9 cijfers en vervolgens wordt de code afgesloten met bijvoorbeeld 'B01' of 'B02'. Die laatste aanduiding geeft het volgnummer van het gekoppelde bedrijf aan. Een paar voorbeelden:

NL123456789B01
NL12345678B02


De code die tussen de landcode en de bedrijfsaanduiding staat, is het BSN of het vroegere sofinummer. Het BSN is in 2007 ingevoerd. Het is een uniek identificerend persoonsnummer dat iedereen krijgt, die ingeschreven staat in de Gemeentelijke basisadministratie en persoonsgegevens. 
Getalsmatig is het burgerservicenummer gelijk aan het sociaal fiscaalnummer (sofinummer), dat wil zeggen dat het ook uit negen cijfers bestaat en dat het voldoet aan de elfproef. 
Bij een elfproef worden de cijfers gewogen bij elkaar opgeteld. Dit houdt in dat afhankelijk van de positie van het cijfer wordt het met een afgesproken waarde vermenigvuldigd. Het eerste getal wordt met negen vermenigvuldigd, het tweede met acht, het derde met zeven etc. De afzonderlijke resultaten van de eerste acht posities worden bij elkaar opgeteld en het getal van de laatste positie wordt er van afgetrokken. Het resultaat wordt vervolgens gedeeld door elf. De rest van deze deling moet gelijk zijn aan nul. De elfproef als formule:

 
 
    Mod((P1*9 + P2*8 + P3*7 + P4*6 + P5*5 +P6*4 + P7*3 + P8*2 – P9*1)/11) = 0 
 


Men kan ook stellen dat het restgetal van de deling van het resultaat van de eerste acht posities, gedeeld door elf, overeenkomt met het getal op de negende positie.

 
Public Function IsGeldigeBSN(bsn As String) As Boolean 
 
    Dim controleGetal As Integer = -1 
    Dim factor = 9 
    Dim resultaat = 0 
    Dim uitkomst = 0 
 
    Try 
 
        ' Voeg eventueel een voorloop nul toe  
        If bsn.Length = 8 Then bsn = "0" & bsn 
 
        ' Test eerst op de lengte  
        If bsn.Length = 9 Then 
 
            ' Controlegetal = Meest rechtse getal  
            controleGetal = CType(bsn.Substring(bsn.Length - 1), Integer) 
 
            ' Doorloop het hele getal (2e x 8, 3e x 7, 4e x 6...)  
            For teller = 0 To bsn.Length - 2 
                resultaat += bsn.Substring(teller, 1) * factor 
                factor -= 1 
            Next 
 
            ' Bepaal uitkomst  
            uitkomst = resultaat Mod 11 
 
        End If 
 
 
        ' Komt uitkomst overeen met controlegetal  
        Return (uitkomst = controleGetal) 
 
    Catch ex As Exception 
 
        ' Fout opgetreden  
        Return False 
 
    End Try 
 
End Function 


De elfproef dient er dus voor om te controleren of er niet twee cijfers zijn verwisseld bij het invoeren van een unieke code, zoals in dit geval het burgerservicenummer. Natuurlijk wordt ook elk ander verkeerd cijfer gedetecteerd.

Nieuwsbrief

Blijf op de hoogte van alles wat op VBcentral gebeurd. Meld je nu aan voor onze nieuwsbrief! »

Over ons

Wij zijn gek op het Microsoft .NET ontwikkelplatform en haar ontwikkeltalen, maar we hebben een sterke voorkeur voor Visual Basic .NET! »

Neem contact op

VBcentral.nl
Bataafseweg 20
7101 PA Winterswijk
Nederland
+31 (543) 538 388
info@vbcentral.nl