Beregning af alder ud fra årstal i cpr nummer

Tags:    php

Hejsa.

Jeg vil godt kunne beregne alderen ud fra et cpr pr i php script.

Er der nogen der har en ide til hvordan jeg kan gøre dette?
Lige nu gør jeg sådan, men den fungere jo ikke rigtig den dag der er en der født i 2000 og frem.

Fold kodeboks ind/udPHP kode 



Jeg er klar over tingene i forhold til persondataloven.





6 svar postet i denne tråd vises herunder
3 indlæg har modtaget i alt 26 karma
Sorter efter stemmer Sorter efter dato
Brian har ret, men CPR-beregninger er lidt mere komplicerede end som så, da man ved et cpr-nummer såsom 241299-xxxx netop kan være i tvivl om der er tale om juleaftensdag 1899, eller juleaftensdag 1999. Heldigvis så kan det beregnes, men der skal lidt arbejde til.

Det link Brian gav udregner det 10. (sidste) ciffer (kontrolcifferet), men det er vist ikke helt det du er ude efter.

Til det du beskriver, skal du kigge på det syvende ciffer og sammenholde det med årstallet i CPR-nummeret:

Er det syvende ciffer 0 til 3, så er der tale om en fra 1900-tallet.
Er det syvende ciffer 4 eller 9, og er årstallet 36 eller derunder, så er der tale om en fra 2000-tallet. Er årstallet over 36, så er der tale om en fra 1900-tallet.
Er det syvende ciffer 5 til 8, og er årstallet 57 eller derunder, så er der tale om en fra 2000-tallet. Er årstallet over 57, så er der tale om en fra 1800-tallet.

Indviklet, men det kan lade sig gøre. På den danske Wikipedia kan du se en tabel, der måske gør det lidt mere overskueligt, end jeg kan gøre det på tekst. Der kan du også se hvorfor det skiller ved 37 og 57 (årsintervallerne er nemlig henholdsvis 2000-2036 / 1937-1999 og 2000-2057 / 1858-1899 etc.).

Det 10. (sidste) ciffer i CPR-nummeret er et kontrolciffer, der kan bruges til at kontrollere at CPR-nummeret er gyldigt (selvom der er en smule usikkerhed i det. Nogle få ugyldige numre kan slippe igennem, men det er en anden snak, som du også kan læse lidt om i de følgende links).

Jeg smider lige en bunke links, som du kan more dig med:

http://da.wikipedia.org/wiki/CPR-nummer Nyttig information om CPR-nummeret, og hvordan der beregnes forskellige ting.

http://kronsell.net/cpralder.htm Noget kode der beregner århundred-tallet ud fra et CPR-nummer. Godt nok I Visual Basic, men det burde være til at gennemskue.

https://cpr.dk/cpr-systemet/opbygning-af-cpr-nummeret/ CPRs egen forklaring af CPR-nummerets opbygning.

Tjek dog også det link Brian gav. Lur lidt i JS-koden. Så kan du beregne kontrolcifre, hvis du vil.

Det skal lige nævnes at CPR selv siger at ens kode også skal kunne godtage CPR-numre, der ikke består modulus 11 testen, men ikke hvordan det så skal tjekkes. Indtil videre er der dog kun 18 tildelte numre der ikke består testen, ifølge det link til cpr.dk jeg gav dig.



Så fik jeg den løst.

Måske den kan optimeres en smule, men den virker.

Skulle bruge den som en funktion i et CI projekt
Fold kodeboks ind/udPHP kode 




Overvej at bruge TIMESTAMPDIFF funktionen hvis du bruger MySql. Så skal du bare først pille datoen ud af cpr-nummeret.




Hvordan klarer jeg så når vi når længere frem i tiden?
Datoen er jo kun på 6 cifre og derved kan jeg jo ikke se forskel på om det er 1914 eller 2014.



Du har ret, det bliver for kompliceret. Du skal bruge løbenummeret i cpr-nummeret også.

4000 og 4999 er født fra år 2000-2036, men tjek denne side:

http://kode.porten.dk/cpr_fix/index.htm



t