2007

Feb

01

Av Rolf

Ibland krävs det att ett register innehåller personuppgifter inklusive personnummer. Ett personnummer består av födelsedatum följt av tre siffror samt en kontrollsiffra. Kontrollsiffran måste vara rätt för att personnumret ska vara giltigt och det kan FileMaker hjälpa till att beräkna.

Kontrollsiffran beräknas genom att växelvis multiplicera varje siffra i personnumret med 1 eller 2, lägga ihop siffersumman och ta heltalsdelen som resultat. Lägg in en kontrollberäkning på fältet som innehåller personnumret som ser ut så här:

(Length(Personnummer) = 11) and
(Middle(Personnummer;7;1) = "-") and
(Mod(10 - Mod(
 Choose(Middle(Personnummer;1;1);0;2;4;6;8;1;3;5;7;9) + 
 Middle(Personnummer;2;1) +
 Choose(Middle(Personnummer;3;1);0;2;4;6;8;1;3;5;7;9) +
 Middle(Personnummer;4;1) +
 Choose(Middle(Personnummer;5;1);0;2;4;6;8;1;3;5;7;9) +
 Middle(Personnummer;6;1) +
 Choose(Middle(Personnummer;8;1);0;2;4;6;8;1;3;5;7;9) +
 Middle(Personnummer;9;1) +
 Choose(Middle(Personnummer;10;1);0;2;4;6;8;1;3;5;7;9)
;10);10) = Middle(Personnummer;11;1))

Formeln kontrollerar först att personnumret är 11 tecken (inklusive bindestreck i formen ÅÅMMDD-XXXK), att det finns ett bindestreck på rätt position och lägger sedan ihop siffersumman för respektive siffra.

Tänk på GDPR när du lagrar personnummer.

Samma typ av beräkning används även för beräkning av andra kontrollsiffror, t.ex. för OCR-nummer, ISBN-nummer och liknande.

Beräkningen är tidigare publicerad i boken Att uppgradera till FileMaker Pro 3, utgiven 1996, och FileMaker Pro i praktiken, första upplagan publicerad 1997, båda skrivna av undertecknad.

Kommentarer

2010-10-02 Figge Bergquist

Hur modifierar man kontrollen av personnummer så att den går att använda på 12-siffriga (ÅÅÅÅMMDD-XXXX)?

2010-10-02 Rolf

De första inledande sifforna i årtalet, som kan vara 18, 19 eller 20, används inte för att beräkna kontrollsiffran. Öka alla positioner med 2 i formeln, så här:

(Length(Personnummer) = 13) and(Middle(Personnummer;9;1) = "-") and(Mod(10 - Mod( Choose(Middle(Personnummer;3;1);0;2;4;6;8;1;3;5;7;9) + Middle(Personnummer;4;1) + Choose(Middle(Personnummer;5;1);0;2;4;6;8;1;3;5;7;9) + Middle(Personnummer;6;1) + Choose(Middle(Personnummer;7;1);0;2;4;6;8;1;3;5;7;9) + Middle(Personnummer;8;1) + Choose(Middle(Personnummer;10;1);0;2;4;6;8;1;3;5;7;9) + Middle(Personnummer;11;1) + Choose(Middle(Personnummer;12;1);0;2;4;6;8;1;3;5;7;9);10);10) = Middle(Personnummer;13;1))

2012-07-31 Ralf Bertlin

Hej! Mycket bra blogg. Impad!

2018-01-30 Johan

Detta validerar personnummer och org nr. Men vad är fomulan för att urskilja org nr mot personnummer?

2018-02-02 Rolf

I organisationsnummer är "månadssiffran" > 20. En formel som ger 1 om det är ett organisationsnummer skulle kunna vara:

GetAsNumber (Middle(Personnummer; 3; 2)) > 20

2023-12-11 Konstantin Moutakis

Hur modifierar man kontrollen av personnummer så att den går att använda på 12-siffriga (ÅÅÅÅMMDDXXXX)? Utan streck

2023-12-12 Rolf

Då blir det så här:

(Length(Personnummer) = 12) and (Mod(10 - Mod( Choose(Middle(Personnummer;3;1);0;2;4;6;8;1;3;5;7;9) + Middle(Personnummer;4;1) + Choose(Middle(Personnummer;5;1);0;2;4;6;8;1;3;5;7;9) + Middle(Personnummer;6;1) + Choose(Middle(Personnummer;7;1);0;2;4;6;8;1;3;5;7;9) + Middle(Personnummer;8;1) + Choose(Middle(Personnummer;9;1);0;2;4;6;8;1;3;5;7;9) + Middle(Personnummer;10;1) + Choose(Middle(Personnummer;11;1);0;2;4;6;8;1;3;5;7;9);10);10) = Middle(Personnummer;12;1))

Skriv en kommentar

Din epost-adress stannar hos oss.