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