2011

Maj

4

Av

Vi har fått en del frågor om hur man beräknar ålder på en person om man har personnumret. Det gäller först att göra om personnumret till ett FileMaker-datum. 

Ett personnummer kan skrivas med 12 siffror (ÅÅÅÅMMDD-XXXX) eller med 10 siffror (ÅÅMMDD-XXXX). Skrivs det med 10 siffror kan det bli problem med de personer som är äldre än 100 år, som lika gärna kan vara 0 år. Enligt Skatteverketbyter man då ut bindestrecket mellan datum och de fyra sista siffrorna till ett plustecken.

12 siffror

Det enklaste är om personnumret är angivet med 12 siffror. Jag antar att det finns i ett textfält. För att skapa ett FileMaker-datum anger du formeln:

Date ( Middle(Personnummer; 5; 2); Middle(Personnummer; 7; 2) ; Left(Personnummer;4) )

Glöm inte att ange beräkningsresultatet som Datum.

Funktionen Date tar 3 argument, månad, dag och år i nämnd ordning. Med hjälp av funktionen Middle kan man hämta en del av en textsträng genom att ange positionen för början samt antal tecken. Middle (Personnummer; 5; 2) hämtar två tecken från textfältet Personnummer med början på det 5:e tecknet. Finns tecknen längst till vänster kan du istället använda funktionen Left, som hämtar det antal tecken från början av textfältet som du anger, i det här fallet 4.

Ålder har jag tidigare skrivit hur man beräknar med FileMaker så nu behöver jag bara stoppa in personnummer-datumet, födelsedatumet, i formeln (hämtad från den tidigare artikeln):

Year(Dagensdatum) - Year(Födelsedatum) - 
If(Dagensdatum < Date(Month(Födelsedatum);Day(Födelsedatum);Year(Dagensdatum));1;0)

Enklast är att använda funktionen Let, som låter dig skapa variabler som du kan använda i funktionen. Så här:

Let([
Dagensdatum = Get ( AktuelltDatum );
Födelsedatum = Date ( Middle(Personnummer; 5; 2); Middle(Personnummer; 7; 2) ; 
   Left(Personnummer;4) )
];
Year(Dagensdatum) - Year(Födelsedatum) - 
If(Dagensdatum < Date(Month(Födelsedatum);Day(Födelsedatum);Year(Dagensdatum));1;0)
)

10 siffror

Det blir genast lite mer osäkert utan sekelsiffror. Jag antar att födelseåret alltid är på 2000-talet och kontrollerar om det är rimligt, om det är senare än dagens datum minskar jag med 100 år och får ett födelsedatum på 1900-talet. Om det är ett plustecken mellan datum och de fyra sista siffrorna, drar jag av ytterligare 100 år och klarar på så sätt de flesta fall.

Let([
Dagensdatum = Get ( AktuelltDatum );
Födelsedatum = Date ( Middle(Personnummer; 3; 2); Middle(Personnummer; 5; 2) ; 
   2000 + Left(Personnummer;2));
Födelsedatum = if(Födelsedatum > Dagensdatum;Date(Month(Födelsedatum); 
   Day(Födelsedatum); Year(Födelsedatum)-100);Födelsedatum);
Födelsedatum = if(Middle(Personnummer;7;1)="+";Date(Month(Födelsedatum); 
   Day(Födelsedatum); Year(Födelsedatum)-100);Födelsedatum)
];
Year(dagensdatum) - Year(Födelsedatum) - 
If(dagensdatum < Date(Month(Födelsedatum);Day(Födelsedatum);Year(dagensdatum));1;0)
)

Lägg märke till att jag endast ändrat i variablerna i första delen av Let-funktionen, själva beräkningen av ålder är exakt densamma.

Kön

I personnumret finns också information om personens kön. Det är den näst sista siffran som är udda för män, jämn för kvinnor. Näst sista siffran är den 10:e om du har personnumret enligt formen ÅÅMMDD-XXXX eller den 12:e om du har den längre formen av personnummer. Byt i så fall ut siffran 10 mot 12 i formeln nedan.

if(Mod(Middle(Personnummer;10;1);2) = 1;"Man";"Kvinna" )

Funktionen Mod ger resten vid division med ett tal, i det här fallet 2. Dividerar du ett udda tal med 2 får du resten 1, alltså är det då en man.

Giltigt personnummer

Det är viktigt att du har ett giltigt personnummer. Du kan kontrollera checksiffran med FileMaker, läs mer om det här.

Skriv en kommentar

  • (will not be published)
  • × 5 = five

Läs också: