/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
Alder ud fra CPR-nummer
Fra : Steen Ulrick Madsen


Dato : 17-06-06 17:15

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....

Mvh og på forhånd tak.

Steen



 
 
Steen Ulrick Madsen (17-06-2006)
Kommentar
Fra : Steen Ulrick Madsen


Dato : 17-06-06 19:24

"Steen Ulrick Madsen" <denne@virkerikke.dk> skrev i en meddelelse
news:44942a78$0$60787$157c6196@dreader1.cybercity.dk...
> 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....
>
> Mvh og på forhånd tak.
>
> Steen

Nå kunne ikke vente....
det kom så til at se sådan ud:


'STAAAAAAART

CPR = rstemp("personnummer")

'Fjern bindestreg
CPR = Replace(CPR, "-", "")

Dag = Int(Mid(CPR, 1, 1) + Mid(CPR, 2, 1))
Mdr = Int(Mid(CPR, 3, 1) + Mid(CPR, 4, 1))
Aar = Int(Mid(CPR, 5, 1) + Mid(CPR, 6, 1))

'der tages altså ikke hensyn til folk. der er født i 1800 eller 2000, den
laver jeg senere
Aarhundred = 1900

'Find fødselsdagen
Fodselsdato = DateSerial(Aarhundred + Aar, Mdr, Dag)

'Find alderen
If DateSerial(Year(Date), Mdr, Dag) > Date Then
BeregnAlderFraCPR = DateDiff("yyyy", Fodselsdato, Date) - 1
Else
BeregnAlderFraCPR = DateDiff("yyyy", Fodselsdato, Date)
End If

' Her slutter aldersberegningen
- og den virkede

Mvh Steen



Jens Gyldenkærne Cla~ (17-06-2006)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 17-06-06 22:01

Steen Ulrick Madsen skrev:

> Nå kunne ikke vente....
> det kom så til at se sådan ud:

Jørn har allerede sendt en mere gennemarbejdet løsning, men du får
lige et par hurtige kommentarer til din egen.

> 'Fjern bindestreg
> CPR = Replace(CPR, "-", "")

Det er egentlig ikke nødvendigt at fjerne bindestregen når du kun
skal bruge de første 6 cifre af cpr-nummeret.

> Dag = Int(Mid(CPR, 1, 1) + Mid(CPR, 2, 1))
> Mdr = Int(Mid(CPR, 3, 1) + Mid(CPR, 4, 1))
> Aar = Int(Mid(CPR, 5, 1) + Mid(CPR, 6, 1))

Mid kan godt tage mere end ét tegn ud ad gangen - ovenstående kunne
skrives som:

Dag = CInt(Mid(CPR, 1, 2))
Mdr = CInt(Mid(CPR, 3, 2))
Aar = CInt(Mid(CPR, 5, 2))

(jeg foretrækker at typekonvertere eksplicit med CInt i stedet for
implicit via en heltalsfunktion)
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Jørn Andersen (17-06-2006)
Kommentar
Fra : Jørn Andersen


Dato : 17-06-06 19:28

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

Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408847
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste