13. september 2004 - 11:20
#1
Jeg har lavet denne funktion, så den beregner fødselsdagen ud fra CPR-nr.
Den benytter de officielle metoder til at beregne hvilket århundrede personen er født:
Function FødselsdatoAfCPR(CPR As String) As Date
'CPR kan angives både MED og UDEN bindestreg
On Error Resume Next
Dim TestSum As Long
Dim Fødselsdato As Date
Dim a As Integer, b As Integer, c As Integer, d As Integer, e As Integer, F As Integer, G As Integer, H As Integer, i As Integer, j As Integer
Dim Aar As Integer, Mdr As Integer, Dag As Integer, Aarhundred As Integer
'Fjern evt bindestreg
CPR = Replace(CPR, "-", "")
a = Mid(CPR, 1, 1)
b = Mid(CPR, 2, 1)
c = Mid(CPR, 3, 1)
d = Mid(CPR, 4, 1)
e = Mid(CPR, 5, 1)
F = Mid(CPR, 6, 1)
G = Mid(CPR, 7, 1)
H = Mid(CPR, 8, 1)
i = Mid(CPR, 9, 1)
j = Mid(CPR, 10, 1)
TestSum = (4 * a + 3 * b + 2 * c + 7 * d + 6 * e + 5 * F + 4 * G + 3 * H + 2 * i + j)
On Error GoTo Except
'dag = StrToInt(cpr[1]+Cpr[2])
Dag = Int(Mid(CPR, 1, 1) + Mid(CPR, 2, 1))
'Mdr = StrToInt(cpr[3]+Cpr[4])
Mdr = Int(Mid(CPR, 3, 1) + Mid(CPR, 4, 1))
'Aar = StrToint(cpr[5]+Cpr[6])
Aar = Int(Mid(CPR, 5, 1) + Mid(CPR, 6, 1))
Aarhundred = 0
Select Case G
Case 0 To 3: Aarhundred = 1900
Case 4
Select Case Aar
Case 0 To 36: Aarhundred = 1900
Case 37 To 99: Aarhundred = 2000
End Select
Case 5
Select Case Aar
Case 0 To 36: Aarhundred = 2000
Case 58 To 99: Aarhundred = 1800
End Select
Case 6
Select Case Aar
Case 0 To 36: Aarhundred = 2000
Case 58 To 99: Aarhundred = 1800
End Select
Case 7
Select Case Aar
Case 0 To 36: Aarhundred = 2000
Case 58 To 99: Aarhundred = 1800
End Select
Case 8
Select Case Aar
Case 0 To 36: Aarhundred = 2000
Case 58 To 99: Aarhundred = 1800
End Select
Case 9
Select Case Aar
Case 0 To 36: Aarhundred = 2000
Case 37 To 99: Aarhundred = 1900
End Select
End Select
FødselsdatoAfCPR = DateSerial(Aarhundred + Aar, Mdr, Dag)
Exit Function
Except:
FødselsdatoAfCPR = False
End Function
Læg denne funktion i et modul og brug den til at beregne alderen i stedet for din datevalue
13. september 2004 - 11:49
#3
Bruger du Access 97?
Men hvis du VED, at der ikke er bindestreg i CPRnummeret, kan du helt fjerne linien:
CPR = Replace(CPR, "-", "")
Den er kun medtaget for at fjerne eventuelle bindestreger