BSN nummers valideren met de 11-proef

30-03-2012 | Marcel van Langen | ColdFusion | gemeente, provincie, overheid, ministerie, SOFI, DigiD

Het burgerservicenummer (BSN) is een uniek persoonsgebonden nummer. Iedereen die zich heeft ingeschreven bij de GBA heeft een BSN nummer. Het nummer heeft vooral een belangrijke functie binnen het electronische verkeer met gemeenten en andere overheden. De kans is dus groot dat je hier als ontwikkelaar mee te maken krijgt. Dan speelt ook de zogenaamde elfproef (11-proef) een belangrijke rol. Dit artikel maakt het allemaal duidelijk!

Ben je in het GBA ingeschreven, dan heb je een BSN nummer. Vrijwel iedereen in Nederland heeft met andere woorden zo'n BSN nummer. Reuze handig ook, want het is het belangrijkste identificatienummer in al het digitale verkeer binnen en met de overheid.

Ik ben op dit moment bezig met een project binnen de groene zorg. Hierbinnen vond allerhande uitwisseling van gegevens plaats met het CAK (Centraal AdministratieKantoor) volgens de ZA Standaard (Zorgaanbieders Standaard). Denk hierbij bijvoorbeeld aan cliëntgegevens, incassogegevens en gegevens over de verleende zorg. Maar daarvoor volgt later nog wel een meer uitgebreid artikel. Nu wil ik me alleen even richten op het gebruik van het BSN nummer, meer in het bijzonder de zogenaamde 11-proef.

De 11-proef is eigenlijk niets meer dan een eenvoudige manier om vooraf te kunnen controleren of een BSN nummer een geldige opbouw heeft. De 11-proef is een rekensom die je los laat op de 9 cijfers van het BSN nummer. Het resultaat van die rekensom moet deelbaar zijn door 11, met andere woorden een integer getal opleveren. Hoe gaat deze som nu in zijn werk?

De rekensom ziet het BSN nummer als een set van 9 losse getallen. Ieder getal wordt vermenigvuldigd met een bepaalde waarde. Vervolgens worden al die waarden bij elkaar opgeteld. In een formule ziet deze berekening er als volgt uit: (9 x getal 1) + (8 x getal 2) + (7 x getal 3) + (6 x getal 4) + (5 x getal 5) + (4 x getal 6) + (3 x getal 7) + (2 x getal 8) + (-1 x getal 9) Deze eindwaarde moet een veelvoud van 11 zijn. Een kort voorbeeld kan dit verhelderen. We gaan hierbij uit van het BSN nummer 458423129.

Positie Waarde Factor Resultaat
14936
25840
38756
44624
52510
63412
7133
8224
99-1-9

Let op de factor -1 bij de laatste waarde. Het totaal van deze berekening is 176. Dit getal is een veelvoud van 11 (11x16). Het BSN nummer 458423129 is een geldig BSN nummer.

Ik heb de berekening hiervoor uitgeschreven in CFML. Ik ben me ervan bewust dat een kortere notatie zou kunnen. Een UDF is ook een goede optie voor een functie als deze.

<!--- Input --->
<cfparam name="attributes.bsn_number_controle" default="" />
<!--- Output --->
<cfparam name="attributes.bsn_11_proef_resultaat" default="1" />
<!--- Controle --->
<cfif len(attributes.bsn_number_controle) NEQ 9>
<cfset attributes.bsn_number_controle = 0 />
<cfelseif Not IsNumeric(attributes.bsn_11_proef_resultaat)>
<cfset attributes.bsn_11_proef_resultaat = 0 />
<cfelse>
<!--- Doe de 11 proef --->
<cfset variables.cijfer_1 = Evaluate(9*Mid(attributes.bsn_number_controle,1,1)) />
<cfset variables.cijfer_2 = Evaluate(8*Mid(attributes.bsn_number_controle,2,1)) />
<cfset variables.cijfer_3 = Evaluate(7*Mid(attributes.bsn_number_controle,3,1)) />
<cfset variables.cijfer_4 = Evaluate(6*Mid(attributes.bsn_number_controle,4,1)) />
<cfset variables.cijfer_5 = Evaluate(5*Mid(attributes.bsn_number_controle,5,1)) />
<cfset variables.cijfer_6 = Evaluate(4*Mid(attributes.bsn_number_controle,6,1)) />
<cfset variables.cijfer_7 = Evaluate(3*Mid(attributes.bsn_number_controle,7,1)) />
<cfset variables.cijfer_8 = Evaluate(2*Mid(attributes.bsn_number_controle,8,1)) />
<cfset variables.cijfer_9 = Evaluate(-1*Mid(attributes.bsn_number_controle,9,1)) />
<!--- Tel alles bij elkaar op --->
<cfset variables.totaal = variables.cijfer_1 +
variables.cijfer_2 +
variables.cijfer_3 +
variables.cijfer_4 +
variables.cijfer_5 +
variables.cijfer_6 +
variables.cijfer_7 +
variables.cijfer_8 +
variables.cijfer_9
/>
<!--- Kijk of het deelbaar door 11 is --->
<cfif variables.totaal MOD 11 NEQ 0>
<cfset attributes.bsn_11_proef_resultaat = 0 />
</cfif>
</cfif>

Graag gedaan!

Over Morloff

Morloff ontwerpt en realiseert succesvolle webtoepassingen op het gebied van procesoptimalisatie, eCommerce en rapportage door de inzet van moderne webtechnieken, sociale media en zoekmachine optimalisatie.

over ons | diensten | portfolio | contact | route

naar website IJsmonster.nl naar website ICT intermediairs naar website marcelvanlangen.com

Twitter

Morloff

Cuneraweg 169a
3911 RH Rhenen

M +31 (0)6 - 515 96 189
W www.morloff.nl
E contactformulier

Morloff op Twitter Morloff op Facebook Morloff op LinkedIn Morloff via RSS