22. maj 2002 - 10:36
Der er
12 kommentarer og 1 løsning
Check af CPR nummer
Jeg leder efter en stump kode (helst java, ellers VB) eller en simpel algoritme, som checker et standard danske CPR-nr (noget med modulus...)
Annonceindlæg fra Barco
Man sidder nok og kan ikke finde ud af sin makro programmering, var??
Går du også på Ballerup teknisk skole?
Næh, arbejder på et systemprojekt som registrerer patienter...!
Hmm... Vi har ellers lavet en makro som kan check om CPR-nr er gyldige...
Har ikke brug for at opfinde den dybe t... igen så jagteer lidt hurtig kode-genbrug. Kunne I ikke hjælpe i stedet for blot at kommentere ?
Måske kan du bruge den her makro (til Word 2000), om jeg skrev som en skole-opgave. Sub CPRValidering() ' ' CPRValidering Makro ' Makro oprettet 30-04-02 af Jesper N. H. ' Dim cprnummer As String Dim gyldighed As String cprnummer = InputBox$("Indtast CPR-nummer" & vbCrLf & "ddmmåå-lbnr" & vbCrLf & "F.eks." & vbCrLf & "241280-2445") If (Len(cprnummer) = 11) And Mid(cprnummer, 7, 1) = "-" = True Then c1 = (Mid(cprnummer, 1, 1) * 4) c2 = (Mid(cprnummer, 2, 1) * 3) c3 = (Mid(cprnummer, 3, 1) * 2) c4 = (Mid(cprnummer, 4, 1) * 7) c5 = (Mid(cprnummer, 5, 1) * 6) c6 = (Mid(cprnummer, 6, 1) * 5) c8 = (Mid(cprnummer, 8, 1) * 4) c9 = (Mid(cprnummer, 9, 1) * 3) c10 = (Mid(cprnummer, 10, 1) * 2) c11 = (Mid(cprnummer, 11, 1) * 1) x1 = Mid(cprnummer, 1, 1) x2 = Mid(cprnummer, 2, 1) x3 = Mid(cprnummer, 3, 1) x4 = Mid(cprnummer, 4, 1) x5 = Mid(cprnummer, 5, 1) x6 = Mid(cprnummer, 6, 1) x8 = Mid(cprnummer, 8, 1) x9 = Mid(cprnummer, 9, 1) x10 = Mid(cprnummer, 10, 1) x11 = Mid(cprnummer, 11, 1) sum = c1 + c2 + c3 + c4 + c5 + c6 + c8 + c9 + c10 + c11 modresultat = sum Mod 11 If modresultat = 0 Then gyldighed = "CPR-nummeret er gyldigt :)" Else gyldighed = "CPR-nummeret er ikke gyldigt :P" End If MsgBox ("CPR" & vbTab & "Vægt" & vbTab & "Resultat" & vbCrLf & _ x1 & vbTab & "x 4" & vbTab & "= " & c1 & vbCrLf & _ x2 & vbTab & "x 3" & vbTab & "= " & c2 & vbCrLf & _ x3 & vbTab & "x 2" & vbTab & "= " & c3 & vbCrLf & _ x4 & vbTab & "x 7" & vbTab & "= " & c4 & vbCrLf & _ x5 & vbTab & "x 6" & vbTab & "= " & c5 & vbCrLf & _ x6 & vbTab & "x 5" & vbTab & "= " & c6 & vbCrLf & _ "-" & vbTab & "-" & vbTab & "-" & vbCrLf & _ x8 & vbTab & "x 4" & vbTab & "= " & c8 & vbCrLf & _ x9 & vbTab & "x 3" & vbTab & "= " & c9 & vbCrLf & _ x10 & vbTab & "x 2" & vbTab & "= " & c10 & vbCrLf & _ x11 & vbTab & "x 1" & vbTab & "= " & c11 & vbCrLf & vbCrLf & _ vbTab & "Sum:" & vbTab & sum & vbCrLf & _ "Mod-resultat:" & vbTab & modresultat & vbCrLf & vbCrLf & _ gyldighed) Else MsgBox (cprnummer & " er indtastet forkert." & vbCrLf & vbCrLf & "mmddåå-lbnr") End If End Sub
til moebius: vil du rykke ud med din makro ?
steenk-> Kommer her: Sub CPRKontrol() ' ' CPRKontrol Makro ' Makro oprettet 30-04-02 af Carsten - 156 ' Dim cpr As String cpr = InputBox("Skriv dit CPR-Nr." _ & vbCrLf & vbCrLf & "Eks.: 15/08/75-2683.") If Mid(cpr, 3, 1) = "/" And Mid(cpr, 6, 1) = "/" And Mid(cpr, 9, 1) = "-" = True Then dd1 = Mid(cpr, 1, 1) * 4 dd2 = Mid(cpr, 2, 1) * 3 mm1 = Mid(cpr, 4, 1) * 2 mm2 = Mid(cpr, 5, 1) * 7 yy1 = Mid(cpr, 7, 1) * 6 yy2 = Mid(cpr, 8, 1) * 5 lb1 = Mid(cpr, 10, 1) * 4 lb2 = Mid(cpr, 11, 1) * 3 lb3 = Mid(cpr, 12, 1) * 2 lb4 = Mid(cpr, 13, 1) * 1 sum = dd1 + dd2 + mm1 + mm2 + yy1 + yy2 + lb1 + lb2 + lb3 + lb4 If sum Mod 11 = 0 = True Then MsgBox "Dit Cpr nummer, " & cpr & " er korrekt. Du kan selv checke det at læse" _ & " i Word dokumentet!" Else MsgBox "Du har skrevet et invalid Cpr nummer" End If Else MsgBox "Er du dum eller hva´? Kan du ik´ Læs´? Skriv det rigtigt man!!!" End If End Sub
Tak for begge svar! Til moebius: du missede lige point'ene. Måske hvis du havde svaret før du kommenterede ;-)
16. september 2003 - 15:29
#13
i C#: private Boolean validateCpr(String cpr) { if(cpr.Length == 11) { cpr = cpr.Substring(0,6) + cpr.Substring(7,4); string N = "432765432"; int Sum = 0; int Remainder = 0; int ControlNo = 0; for(int x = 0; x < 9; x++) { Sum += Convert.ToInt32(cpr.Substring(x,1)) * Convert.ToInt32(N.Substring(x,1)); } Remainder = Sum % 11; ControlNo = 11 - Remainder; if(Remainder == 0) { ControlNo = 0; } if(ControlNo == Convert.ToInt32(cpr.Substring(9))) { return true; } else { return false; } } else { return false; } }
Kurser inden for grundlæggende programmering