vrijdag 24 oktober 2008

Om te controleren of een gebruiker een geldig BSN of bankrekeningnummer heeft ingevoerd kan je de elf rpoef uitvoeren. De elfproef is een standaard waaraan alle Bankrekeningnummers (Niet Giro) en BS-nummers in Nederland aan moeten voldoen. De Elf proef voor het BSN kan worden uitgevoerd aan de hand van de volgende formule.

(9*A + 8*B + 7*C + 6*D + 5*E + 4*F + 3*G + 2*H + (-1*I)) % 11 == 0

IN deze formule corespondeerd A met het eerste getal van het nummer, B het tweede getal van het nummer, .. , I met het negende en laatste getal van het nummer. Als de rest deling van de som gelijm is aan nul is het een geldig BSN nummer. Dit heeft een manco, namelijk dat het BSN 000000000 ook als geldig wordt gezien (0 % 11 = 0).
De ElfProef voor een bankrekening nummer wijkt op één punt af van de elfproef voor de BSN. Het laatste cijfer in het nummer wordt dan niet vermenigvuldigd met -1 maar met 1.

Hier onder staat een stukje code dat ik gebruikt heb voor de ElfProef van een BSN in de codebehind van een InfoPath formulier. Over het gebruiken van c# codebehind in combinatie met een infoPath formulier heb ik al een post gechreven. Klik hier om de post te bekijken.


public partial class FormCode
{
public void InternalStartup()
{
EventManager.XmlEvents["/my:mijnVelden/my:BSN"].Changed += new XmlChangedEventHandler(BSN_Changed);
}
public void BSN_Changed(object sender, XmlEventArgs e)
{
String bsnXpath = "//my:BSN";
XPathNavigator bsnBox = MainDataSource.CreateNavigator().SelectSingleNode(bsnXpath, NamespaceManager);
String BSN = bsnBox.Value;
String messageXpath = "//my:Message";
XPathNavigator messageBox = this.MainDataSource.CreateNavigator().SelectSingleNode(messageXpath, NamespaceManager);
if (BSN.Length == 9)
{
int A = int.Parse(BSN.Substring(0, 1));
int B = int.Parse(BSN.Substring(1, 1));
int C = int.Parse(BSN.Substring(2, 1));
int D = int.Parse(BSN.Substring(3, 1));
int E = int.Parse(BSN.Substring(4, 1));
int F = int.Parse(BSN.Substring(5, 1));
int G = int.Parse(BSN.Substring(6, 1));
int H = int.Parse(BSN.Substring(7, 1));
int I = int.Parse(BSN.Substring(8, 1));
int checkInt = 9 * A + 8 * B + 7 * C + 6 * D + 5 * E + 4 * F + 3 * G + 2 * H + (-1 * I);
if (checkInt % 11 == 0)
{
messageBox.SetValue("geldig");
}
else
{
messageBox.SetValue("ongeldig");
}
}
else
{
messageBox.SetValue("Een geldig BSN nummer bestaat uit 9 cijfers");
}
}
}

3 Comments:

  1. Jeroen said...
    Deze reactie is verwijderd door de auteur.
    Jeroen said...
    Hoewel ik geen C spreek, maar wel kennis heb van andere talen: je geeft aan dat 000000000 als geldig wordt gezien.. waarom geen check inbouwen of er 000000000 is ingevoerd en dit laten verwijzen naar "BSN is ongeldig"?
    Unknown said...
    Naast 000000000 zijn 111111110 en 999999990 ook geldig volgens jouw code

Post a Comment