Fødselsnummer - gutt/jente - alder

Laget nylig et skjema som skulle brukes av barnehagene. Saksbehandlerne ville at det i skjemaet skulle fylles ut barnets fødselsnummer, alder og om barnet er gutt eller jente. Jeg tenkte det var unødvendig med tre felt å fylle ut, i og med at fødselsnummeret allerede inneholder informasjon om alder og kjønn.

Jeg finner ikke mange tilsvarende tips rundt fødselsnummer her på community så jeg deler min løsning.

For å liste ut om dette er en gutt eller jente laget jeg denne funksjonen:

var JG = substr (Fodselsnummer, 8, 1);
if (JG==“0” || JG==“2” || JG==“4” || JG==“6” || JG==“8”) { return “Jente”; };
if (JG==“1” || JG==“3” || JG==“5” || JG==“7” || JG==“9”) { return “Gutt”; };

Den nederst linjen kunne ha vært else {return “Gutt”;}; - men da vil det stå Gutt i tekstfeltet før en fyller inn fødselsnummeret. Jeg vil at det skal være blankt.

Når det gjelder alder på barn har det betydning om de nettopp har fylt år eller om de snart fyller år, så formelen tar med måned de er født i. Denne ønsket jeg også skulle ta hensyn til om vedkommende er født før eller etter århundreskiftet fordi jeg tenkte å bruke tilsvarende i andre skjema.

var Vmm = substr (Fodselsnummer, 2, 2);
var Nmm = getmonth(now());
var Vyy = substr (Fodselsnummer, 4, 2);
var Nyy = getyear(now());
var age = 0;

if (Vyy > 30) { age = Nyy - (Vyy + 1900); }; else { age = Nyy - (Vyy + 2000); };

if ( Vmm < Nmm ) {return age + " " + "år og " + ( Nmm - Vmm ) + " " + “måneder”; };
if ( Vmm == Nmm ) {return age + " " + “år” ; };
if ( Vmm > Nmm ) {return ( age - 1 ) + " " + "år og " + ( 12 - Vmm + Nmm ) + " " + “måneder”; };

Her brukte jeg årstallet 30 som skille (etter 1930 og før 2030), en kan bruke 25 men da må en huske i formelen å bytte til 26 neste år. Jeg burde nok lagt inn noe som kan korrigere for de som er født før 1930 - de “mister noen år” i skjemaet.

En ting har jeg ikke funnet ut av. I tekstfeltet alder (som er = funksjonen) står det “24 år og 6 måneder” før man fyller ut feltet fødselsnummeret. Ikke helt perfekt.

Formlene kan sikkert skrives litt enklere og mer elegant, men de virker ok i mitt skjema.

1 Like

Ikke sikkert det er en løsning for deg, men en vei rundt at det står 24 år og 6 måneder før man fyller ut kan jo være å skjule det feltet helt til fnr er fyllt ut?

Jeg fant tidligere et eksempel (Regne ut fødelsdato med riktig århundre) hvor man benytter skatteetatens regler for å beregne alder som jeg kopierte og tilpasset. Jeg har et skript som sjekker om en person er over eller under 18 år.

Legger det ved her så kan man bruke/tilpasse om ønskelig.

//Beregning av om person er over 18 år til og med dagens dato

//Henter dagens dato for sammenligning
var dagensdato = now();
var dag = getday(dagensdato);
var maaned = getmonth(dagensdato);
var aar = getyear(dagensdato);

//henter fnr til den innloggede brukeren
var fnr=Kopi_fnr;  
var fdag=substr(fnr,0,2);  
var fmaaned=substr(fnr,2,2); 
var arstall=int(substr(fnr,4,2)); 
var individnr=substr(fnr,6,3);  //henter individnummeret for sjekk iht skatteetatens regler

//SKatteetatens regler pr 07.07.2022
//1854-1899, brukes serien 749-500
//1900-1999, brukes serien 499-000
//1940-1999, brukes også serien 999-900
//2000-2039, brukes serien 999-500


//beregner århundre basert på S-etatens regler
var arhundre; 
var faar;

if(individnr>=500 && individnr<=749 && arstall>=54 && arstall<=99){arhundre=1800};
if(individnr>=0 && individnr<=499 && arstall>=0 && arstall<=99){arhundre=1900};
if(individnr>=900 && individnr<=999 && arstall>=40 && arstall<=99){arhundre=1900};
if(individnr>=500 && individnr<=999 && arstall>=0 && arstall<=39){arhundre=2000};

faar=(arhundre)+(arstall); 

//Genererer fødselsdato med korrekt århundre => date(år,mnd,dag)
var fdato = date(faar,fmaaned,fdag);


//Sammenligne fødselsår med nåværende år
//Først sjekke om vedkommende er over 18 - i så fall er saken grei
if(aar - faar > 18)
{
	return true;
};


//Sjekke om vedkommende fyller 18 dette året - i så fall må vi sammenligne måneder og, hvis nødvendig, dag
if(aar - faar == 18)
{
	if(maaned - fmaaned > 0)
	{
		return true;
	};
	
	if(maaned - fmaaned < 0)
	{
		return false;
	};
	
	//Dersom vedkommende har dag i inneværende måned må vi sjekke dag for å finne ut om vedkommende er over 18 år
	if(maaned - fmaaned == 0)
	{
		if(dag - fdag > 0)
		{
			return true;
		};
		
		if(dag - fdag < 0)
		{
			return false;
		}
		
		if(dag - fdag == 0)
		{
			return true;
			//gratulerer med dagen
		};
	};
};

//Sjekke om vedkommende er under 18 dette året - i så fall returnerer vi false siden vedkommende er under 18
if(aar - faar < 18)
{
	return false;
};
return false;


Hei. For Interact+ som bruker C# kan man skrive følgende kode:

if(string.IsNullOrEmpty(Fnr))
    return "";

var kjonnsiffer = Fnr[8];
if(kjonnsiffer % 2 == 0)
  return "Kvinne";
else 
  return "Mann";

Og for alder kan man skrive:

if(string.IsNullOrEmpty(Fnr))
    return "Nei";
    
var fodseldato = Fnr.Substring(0, 6);

System.DateTime dateTime = System.DateTime.ParseExact(fodseldato, "ddMMyy", System.Globalization.CultureInfo.InvariantCulture);

var alder = new System.TimeSpan(System.DateTime.Now.Ticks - dateTime.Ticks).Days / 365;

if(alder >= 18)
    return "Ja";
else
    return "Nei";

1 Like

Takk! Skal leke meg litt med denne.

1 Like