De elfproef is een standaard manier om te valideren of een BSN nummer een geldige opmaak heeft. In dit artikel beschrijven we hoe we het voor elkaar krijgen om deze elfproef toe te voegen aan een veld in een formulier. Heeft een gebruiker een ongeldig BSN nummer ingevoerd, dan wordt de gebruiker hier op gewezen.
Om dit te doen gaan we een zogenaamde DEFAULT aanmaken. Deze DEFAULT genereert een melding op het moment dat het opgegeven BSN nummer niet voldoet aan de elfproef. Hiervoor moeten we de volgende stappen doorlopen:
declare @message varchar(1000);
if @cursor_from_col_id = 'bsn'
and @bsn is not null
begin
if dbo.func_bsn_elf_proef_controle(@bsn) = 0
or len(@bsn) <> 9
begin
set @message = '' + cast(@bsn as varchar(100) ) + ' ';
exec dbo.tsf_send_message 'bsn_controle_11_proef', @message, 0;
set @bsn = null;
end;
end;
Let op: we gaan er hierbij vanuit dat de kolom 'bsn' heet. Je moet hier natuurlijk de naam van je eigen kolom inzetten. Je kunt ook met een variabele werken, dan geef je via een variabele aan de DEFAULT aan hoe de kolom heet. Maar dat is voor een volgend artikel!
Zoals je ziet wordt in het geval de BSN ongeldig is een nette melding aangemaakt. Ook wordt in dat geval de waarde van het formulierveld BSN leeggemaakt. Je ziet dat we hier verwijzen naar een functie die de feitelijke elfproef doet. Deze maak je ook aan via Business Logic > Functionality, maar dan kies je voor de code group 'Functions'. De inhoud van deze functie is als volgt:
declare @intteller int,
@intteller2 int,
@intsom bigint,
@numcontrolesom numeric(18,6),
@bsn_voldoet_aan_11_proef nee_ja
set @intteller2 = len(@bsn)
set @intteller = 1
set @intsom = 0
while @intteller <= len(@bsn)
begin
set @intsom = ( convert(bigint, substring(@bsn, @intteller, 1)) * case when @intteller2 = 1
then -1
else @intteller2
end
) + @intsom
set @intteller = @intteller + 1
set @intteller2 = @intteller2 - 1
end
set @numcontrolesom = convert(numeric(18,6), @intsom) / 11.000000
if floor(@numcontrolesom) = ceiling(@numcontrolesom) and len(@bsn) in (8,9)
begin
set @bsn_voldoet_aan_11_proef = 1
end
else
begin
set @bsn_voldoet_aan_11_proef = 0
end
return @bsn_voldoet_aan_11_proef
Zonder teveel op de inhoud in te gaan zie je dat deze een BOOLEAN teruggeeft om aan te geven of het opgegeven BSN nummer wel of niet voldoet aan de elfproef.
Mijn naam is Marcel van Langen. Ik ben werkzaam als freelancer. Een harde en eerlijke werker, met een passie voor doelgerichte oplossingen. Ik voer al jaren mooie klussen uit voor geweldige klanten. Mijn technische specialisaties zijn het Thinkwise platform, SQL Server en ColdFusion development.
Lees verder...