Avatar billede therichman Nybegynder
09. juli 2003 - 19:53 Der er 17 kommentarer og
1 løsning

Cpr nummer tester

Jeg vil godt lave et lille simpelt program, hvor der er et tekstfelt, og en knap på. Når man trykker på knappen checker programmet om Det indtastede er et gyldigt Cpr nummer. Jeg hart søgt efter lignende spørgsmål, men det var kun i Java scripts.
Avatar billede Slettet bruger
09. juli 2003 - 20:05 #1
Jeg mener at have et liggende på mit arbejde, jeg kigger efter i morgen, hvis du ikke har fået noget svar :-)
09. juli 2003 - 20:14 #2
I dette dokument finder du på side 12 koden til et VB-script til kontrol af CPR-numre.

www.ibt.ku.dk/dat1/vba/introvba.doc
Avatar billede Slettet bruger
09. juli 2003 - 20:20 #3
Nu er jeg forvirret og skal lige spørge, skal det være VB script eller Visual Basic?
Avatar billede terry Ekspert
09. juli 2003 - 20:30 #4
Private Sub CmdOK_Click()
'CprNo is a text field

    If (CPR_Ok(CprNo)) Then
        MsgBox "The CPR number is valid ..."
    Else
        MsgBox "The CPR number is invalid ..."
    End If
End Sub

Function CPR_Ok(ByVal CPR As Variant) As Variant
' Returns TRUE if CPR is valid

Dim I As Integer
Dim Multipliers(1 To 10) As Integer
Dim Sum As Integer


    If Not IsNull(CPR) Then
        Multipliers(1) = 4
        Multipliers(2) = 3
        Multipliers(3) = 2
        Multipliers(4) = 7
        Multipliers(5) = 6
        Multipliers(6) = 5
        Multipliers(7) = 4
        Multipliers(8) = 3
        Multipliers(9) = 2
        Multipliers(10) = 1
       
        Sum = 0
       
        If Len(CPR) = 10 Then
            For I = 1 To 10
                Sum = Sum + CInt(Mid$(CPR, I, 1)) * Multipliers(I)
            Next I
       
            CPR_Ok = (Sum Mod 11) = 0
           
        End If
    End If
       
   
End Function
Avatar billede therichman Nybegynder
09. juli 2003 - 21:57 #5
Det er almindelig VB jeg skal bruge, så jeg siger Nej tak til erikjuul´s svar.
Da jeg testede terry´s så den ud til at virke. Jeg acceptere dit svar, men kommer lige med et ekstra spørgsmål: Når man kan lave et program der checker om et cpr nummer er gyldigt, kan man så ikke også lave det modsatte? Altså et program der generede gyldige CPR numre?
Avatar billede terry Ekspert
09. juli 2003 - 22:02 #6
yes if you know what a valid CPR number must contain!

Og tak :o)
Avatar billede therichman Nybegynder
11. juli 2003 - 10:36 #7
Hej igen!
Jeg ved godt at jeg allerede har givet pointene, men jeg har altså fundet ud af at Terry´s kode, ikke er helt optimal.
Den godkendte nemlig et Cpr nr. der startede med 56 og andre tal.
Og dette er jo helt umuligt! Man kan jo ikke have fødselsag d. 56-19 vel?
Plz! Gør sådan at det virker optimalt...
11. juli 2003 - 12:10 #8
Så kan jeg jo kun sige, at det var uheldigt at afvise mit svar, for det checker selvfølgelig også om de 6 første cifre er en korrekt dato.

Men hvis det er for besværligt at åbne et link får det her:

Private Sub cmdValider_Click()

  Dim cprcif(1 To 10) As Integer
  txtCPR.Text = Trim(txtCPR.Text)

  If Not IsNumeric(txtCPR.Text) Then

      txtStatus.Text = _
    "CPR-nr. indeholder ikke kun cifre"

  ElseIf Len(txtCPR) <> 10 Then

      txtStatus.Text = _
    "CPR-nr. indeholder " & _
    Len(txtCPR) & " cifre"

  ElseIf Not  _
      IsDate(          Mid(txtCPR.Text, 1, 2) _
                  & "/" & Mid(txtCPR.Text, 3, 2) _
                  & "/" & Mid(txtCPR.Text, 5, 2)) Then

      txtStatus.Text = "Fejl i dato i CPR-nr,"

  Else

      For i = 1 To 10
        cprcif(i) = Mid(txtCPR.Text, i, 1)
      Next i

      chksum = 0

      For i = 1 To 3
        chksum = chksum + (5 - i) * cprcif(i)
      Next i

      For i = 4 To 10
        chksum = chksum + (11 - i) * cprcif(i)
      Next i

      If chksum Mod 11 = 0 Then
        txtStatus.Text = "CPR-nr. er korrekt"
      Else
        txtStatus.Text = _
"CPR-nr. opfylder ikke mod 11-test"
      End If

  End If

  txtCPR.SetFocus
  txtCPR.SelStart = 0
  txtCPR.SelLength = Len(txtCPR.Text)
End Sub
Avatar billede therichman Nybegynder
11. juli 2003 - 13:36 #9
Jeg har fundet et minus i dit program erikjuul.
5606173301 slipper igennem!
Og der er vist ikke nogen der har fødselsdag den 56-06 vel?
Avatar billede therichman Nybegynder
11. juli 2003 - 13:38 #10
Og desuden så er et CPR nummer på 11 cifre!
11. juli 2003 - 13:50 #11
11 cifre ????
Så er der noget galt med mit for det er kun på 10 cifre.

Programmet for et korrekt DANSK datoformat.
Avatar billede therichman Nybegynder
11. juli 2003 - 13:53 #12
Nåh, men der er også andre der slipper igennem:
7303207990
4903219624
5308168850

Og sikkert også mange andre!
Prøv selv!
Avatar billede therichman Nybegynder
11. juli 2003 - 13:54 #13
73-03 49-03 og 53-08 er jo ikke nogle korrekte DANSKE datoformater vel?
11. juli 2003 - 13:55 #14
Ja, og fælles for alle dem er at det er korrekte datoer efter amerikansk standard.

Hvis du checker med danske indstillinger, eller ændrer i koden så den tager højde for det.
11. juli 2003 - 13:57 #15
Byt om på 1 og 5-tallet som her i koden, så kan du bruge dine amerikanske indstillinger.

  ElseIf Not _
      IsDate(Mid(txtCPR.Text, 5, 2) _
                  & "/" & Mid(txtCPR.Text, 3, 2) _
                  & "/" & Mid(txtCPR.Text, 1, 2)) Then
Avatar billede therichman Nybegynder
11. juli 2003 - 13:59 #16
Jeg kan ik finde hoved og hale i den kode!
Jeg er nok også lidt newbie...
Men hvor i det her skal jeg ændre?:
IsDate(          Mid(txtCPR.Text, 1, 2) _
                  & "/" & Mid(txtCPR.Text, 3, 2) _
                  & "/" & Mid(txtCPR.Text, 5, 2)) Then
Avatar billede therichman Nybegynder
11. juli 2003 - 14:07 #17
7011166339  7111122886  8301100680
Går stadig igennem selvom jeg har ændret:
IsDate(          Mid(txtCPR.Text, 1, 2) _
                  & "/" & Mid(txtCPR.Text, 3, 2) _
                  & "/" & Mid(txtCPR.Text, 5, 2)) Then
 
til

ElseIf Not _
      IsDate(Mid(txtCPR.Text, 5, 2) _
                  & "/" & Mid(txtCPR.Text, 3, 2) _
                  & "/" & Mid(txtCPR.Text, 1, 2)) Then
Avatar billede terry Ekspert
11. juli 2003 - 18:19 #18
therikman, sorry if my solution wasnt 100% OK! I could easily have corrected iot but didnt see the comments until now. If you still need help on this then I'll keep an eye open to assist :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

Seneste spørgsmål Seneste aktivitet
I går 10:21 Ny printer, men hvilken Af mort1 i Printere
13/0819:41 USB på Linux Af Uvanga i Linux
12/0818:26 Hvilken type mus Af mort1 i PC
11/0813:21 ms Forms Af leahcim i Andet software
10/0821:30 Blokeret på Snapchat? Af LineP i Chat & Messaging