Man kan i dag sagtens skelne mellem 18xx, 19xx og 20xx.- Det gøres ved hjælp af 7. ciffer sammenhold med 5 og 6 (årstallet). Nedenstående funktion beregner alderen og tager højre for århundret.
Er 7. ciffer 0, 1 eller 3 er man altid født i 19xx.
Er 7. ciffer 4 eller 9, og årstallet mindre end eller lig 36 er man født i 20xx.
Er 7. ciffer 4 eller 9 og årstallet større end 36 er man født i 19xx
Er 7. ciffer 5, 6, 7 eller 8 og årstaller mindre end eller = 36 er man født i 20xx.
Er 7. ciffer 5, 6, 7 eller 8, og årstallet større end eller lig 58, er man født i 18xx.
Cpr-numre med årstal 37 til 57u og 7. ciffer 5,6,7 eller 8 eksiterer ikke.
I 2036 skal systemet skiftes ud, da det så ikke længere vil vuirke i den nuværende form. Når man taler om at afskaffe checkcifret, skyldes et et andet forhold, nemlig at der af og til bliver født flere børn på en dag, end der er cpr-numre til. trecifrede løbenumre er derfor ikke altid nok, og så overvejder man at afskaffe modulus 11 kontrollen, og indføre 4.cifrede løbenumre.
Function CprAlder(cpr As String) As Byte
'JKrons, 2002
'Finder fødsels-århundredet ud af
'et cpr-nummer på formen xxxxxx-xxxx
'Den virker kun indtil 2036, hvor cpr-nummersystemet i
'dets nuværende form ophører med at fungere
'se nærmere på
www.cpr.dk Dim bytCent As Byte
Dim bytSevdig As Byte
Dim bytCpryear As Byte
Dim bytCprmonth As Byte
Dim bytCprday As Byte
Dim strErrtxt As String
Dim datTemp As Date
strErrtxt = "Der eksisterer ikke lovlige cpr-numre, hvor årstallet er "
bytSevdig = Mid(cpr, 8, 1)
bytCpryear = Mid(cpr, 5, 2)
bytCprmonth = Mid(cpr, 3, 2)
bytCprday = Mid(cpr, 1, 2)
Select Case bytSevdig
Case 0 To 3
bytCent = 19
Case 4, 9
If bytCpryear <= 36 Then
bytCent = 20
Else
bytCent = 19
End If
Case 5 To 8
If bytCpryear <= 36 Then
bytCent = 20
ElseIf bytCpryear >= 58 Then
bytCent = 18
Else
strErrtxt = strErrtxt & bytCpryear & " og 7. ciffer er " & bytSevdig
MsgBox strErrtxt, vbOKOnly + vbCritical, "CPR-nummer fejl"
Exit Function
End If
End Select
datTemp = DateSerial(bytCent & bytCpryear, bytCprmonth, bytCprday)
If datTemp > Date Then
MsgBox "Den pågældende person er ikke født endnu", vbOKOnly + vbExclamation, "CPR-nummer fejl"
Exit Function
End If
If Mid(datTemp, 7, 2) = 18 Then
CprAlder = Right(DatePart("yyyy", Date - datTemp), 2) + 100
Else
CprAlder = Right(DatePart("yyyy", Date - datTemp), 2)
End If
End Function