On Sat, 17 Jun 2006 18:14:56 +0200, "Steen Ulrick Madsen"
<denne@virkerikke.dk> wrote:
>Er der en der lige har en hurtig programstump til at udregne en persons
>alder ud fra CPR-nummer?
>Har herre travlt og har ikke tid til alt det der datokonverteringssjov....
Hej Steen,
Jeg har redigeret lidt i nogle svar, der tidligere er blevet givet i
gruppen dk.edb.database.ms-access.
Først lige et link til dem der vil checke for fejl:
Fra cpr.dk: Personnummerets opbygning
<url:
http://www.cpr.dk/imagesupload/dokument/Skema%20over%20personnummerets%20opbygning.pdf>
<%
Function BeregnAlder(varCprnr)
'----------------------------
' Modtager et cprnr og afleverer en alder
' Ud fra eksempler i dk.edb.database.ms-access
' Tak til Tom Jensen, Jan Kronsell m.fl.
' rettet 17-06-2006
'----------------------------
' datonumre fra CPRnr.
Dim intFoedDag
Dim intFoedMaaned
Dim intFoedAar
' datonumre fra referencedato (dags dato)
Dim intRefDag
Dim intRefMaaned
Dim datFoedselsDato
Dim intFradrag
Dim intLbnr
Dim intAarh
' Pil dag, måned og år ud af cprnr
intFoedDag = CInt(Left(varCprnr, 2))
intFoedMaaned = CInt(Mid(varCprnr, 3, 2))
intFoedAar = CInt(Mid(varCprnr, 5, 2))
' Pil dag og måned ud af reference datoen
intRefDag = Day(Now)
intRefMaaned = Month(Now)
' 1. ciffer i løbenummeret bestemmer århundrede s.m. fødselsår
intLbnr = CInt(Mid(varCprnr, 8, 1))
Select Case intLbnr
Case 0, 1, 2, 3
intAarh = 1900
Case 4, 9
If intFoedAar < 37 Then
intAarh = 2000
Else
intAarh = 1900
End If
Case 5, 6, 7, 8
If intFoedAar < 37 Then
intAarh = 2000
ElseIf intFoedAar > 57 Then
intAarh = 1800
Else
' Benyttes ikke
End If
End Select
datFoedselsDato = DateSerial(intFoedAar + intAarh, intFoedMaaned,
intFoedDag)
intFradrag = 1
' Hvis referencedag/måned er senere eller lig med fødselsdag/måned er
personen fyldt år
If (intRefMaaned > intFoedMaaned) Or (intRefMaaned = intFoedMaaned And
intRefDag >= intFoedDag) Then
intFradrag = 0
End If
' Hvis personen har haft fødselsdag trækkes de to
' årstal fra hinanden. Hvis ikke trækkes yderligere 1 fra.
BeregnAlder = DateDiff("yyyy", datFoedselsDato, Date, 0, 0) -
intFradrag
End Function
Response.Write BeregnAlder("161265-1111") ' = 40
Response.Write BeregnAlder("160665-1111") ' = 41
Response.Write BeregnAlder("160695-1111") ' = 11
Response.Write BeregnAlder("160695-5111") ' = 111
Response.Write BeregnAlder("160605-5111") ' = 1
Response.Write BeregnAlder("160605-1111") ' = 101
%>
Good luck!
--
Jørn Andersen,
Brønshøj