Thinkwise BSN elfproef toevoegen aan veld

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:

  • Ga naar Business Logic > Functionality
  • Maak een nieuwe Control procedure
  • Kies als code group 'Defaults'
  • Ga nu naar het tabblad Assigning
  • Kies daar voor 'Generate code group'
  • Koppel het template
  • Ga nu naar het tabblad Result
  • Wijzig hier de SQL als volgt:

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.

Over mij

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...
Diensten