Avatar billede wilweb Nybegynder
15. februar 2004 - 17:56 Der er 21 kommentarer og
3 løsninger

modulus 11 tjek (cpr nummer)

Er der en der skulle ligge med en funktion der valideres et CPR nummer.
Avatar billede roenving Novice
15. februar 2004 - 18:02 #1
I java script:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Valider CPR nr</title>
<meta name="Generator" content="Stone's WebWriter 4">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script language="JavaScript" type="text/javascript">
function cprTjeck(frm){
    var cpr = frm.cpr.value
    if(cpr.match(/[0-9]{6}\-[0-9]{4}/)){
        cpr = cpr.replace(/\-/g,"");
        var chk = 0;
        for(i=9;i>-1;i--){
          chk += (+cpr.charAt(i))*((i>2)?(10-i):(4-i));
        }
        if(chk%11==0)return true;
        }
    alert("ikke valid CPR");
    return false;
    }
</script>
</head>
<body>
<form name="form1" method="post" onSubmit="return cprTjeck(this);">
  <input type="text" name="cpr">
  <input type="submit" name="Submit" value="Submit">
</form>
</body>
</html>
Avatar billede thesurfer Nybegynder
15. februar 2004 - 18:40 #2
Kan ikke huske hvor det er fra:

<html>
<head>
<title>CPR nummer checker - kodet af Claes Andersen, Infonauterne</title>
</head>
<body>
<%
If Request.Form("cprnr")="" Then

' Hvis der ikke er indtaster data i formularfeltet, eller
' hvis det er første gang siden besøges, vises formularen

%>
<form method="POST" action="cpr.asp">
    Indtast CPR nummer som skal checkes: <input type="text" size="12" name="cprnr">
    <input type="submit" value="Check CPR nummer"
</form>
<%

ElseIf Not IsNumeric(Left(Request.Form("cprnr"), 10)) Then
Response.Write "Forkert indtastning. Prøv igen"
' Hvis værdien af formularen ikke er et tal, så vises en fejlmeddelelse

Else

    faktor = 432765432
    tempsum = 0
    taeller = 1
    cpr = Request.Form("cprnr")

    kontroltal = 1 * Right(cpr, 1)

    If Len(cpr) = 10 Then
   
    ' Hvis det indtastede cprnummer er netop 10 cifre langt, så gennemføres nedenstående løkke,
    ' der checker gyldigheden af cprnummeret, ciffer for ciffer.
   
        Do While taeller < 10

            tegn = Mid(cpr, taeller, 1)
            mult = Mid(faktor, taeller, 1)

            If IsNumeric(tegn) Then

            ' Hvis det indtastede tegn på pladsen som variablen taeller peger på er et tal,
            ' så foretages beregningen af tempsum, og tælleren taeller forøges med 1

                tempsum = tempsum + tegn * Mult
                taeller = taeller + 1

            Else
           
            ' Hvis der er indtastet et ugyldigt tegn i cprnummeret, meldes nedenstående fejl.
           
                Response.Write "Du har indtastet et ugyldigt tegn"

            End If

        Loop

        ' Når tempsum endeligt er udregnet, checkes efter nedenstående model
   
        check = 11 - tempsum Mod 11

        ' Hvis check svarer til cprnummeret sidste ciffer (kontroltal), eller check = 11, er
        ' cprnummeret gyldigt, og nedenstående meddelelse vises
       
        If check = kontroltal Or check = 11 Then
       
            foedselsdag = Left(cpr, 6)
            serienummer = Right(cpr, 4)
            Response.Write foedselsdag & "-" & serienummer & " er et gyldigt CPR-nummer."
       
        Else
   
        ' Hvis foregående check fejler, er der tale om et ugyldigt cpr-nummer,
        ' og nedenstående meddelelse vises
   
            Response.Write "Cpr nummeret er ugyldigt"

        End If
    Else

        Response.Write "Indtast cpr.nr. med 10 cifre - UDEN bindestreg"

End If
End If

%>

</form>

</body>
</html>
Avatar billede thesurfer Nybegynder
15. februar 2004 - 18:41 #3
Avatar billede roenving Novice
15. februar 2004 - 18:45 #4
-- men den er faktisk forkert ...

Fordi kontroltal _skal_ være 0 hvis check = 11, så rigtigere ville være:

        ' Når tempsum endeligt er udregnet, checkes efter nedenstående model
   
        'check = 11 - tempsum Mod 11

        ' Hvis check svarer til cprnummeret sidste ciffer (kontroltal), eller check = 11, er
        ' cprnummeret gyldigt, og nedenstående meddelelse vises
       
        If tempsum Mod 11 = kontroltal Then
Avatar billede thesurfer Nybegynder
15. februar 2004 - 18:52 #5
Avatar billede wilweb Nybegynder
15. februar 2004 - 19:17 #6
Huummmm.
roenving:> jeg skal bruge det i ASP. Nu har jeg prøvet thesurfer eksempel og så vidt jeg kan se så virker hans eksempel da fint.
Avatar billede roenving Novice
15. februar 2004 - 19:31 #7
Men prøv at teste med et cpr-nummer, som ender på 0 og så giv det et andet endetal ...

-- iøvrigt kan det vel være smart at teste det, før der skal oprettes kontakt til serveren !-)
Avatar billede wilweb Nybegynder
15. februar 2004 - 19:57 #8
roenving:> har du en bedre/korekt løsning i asp
Avatar billede thesurfer Nybegynder
15. februar 2004 - 20:03 #9
hvad med mit script, med roenvings rettelse?
Avatar billede roenving Novice
15. februar 2004 - 20:18 #10
Prøv f.eks. med følgende cpr-nummer: 010100-0400, de forkerte med andet end 0 bagest skulle svare 'rigtigt' med den oprindelige kode, men svare 'forkert' med rettelsen !-)
Avatar billede wilweb Nybegynder
15. februar 2004 - 21:05 #11
Jamen er det sådanne her!

If tempsum Mod 11 = kontroltal ThenThen
  foedselsdag = Left(cpr, 6)
  serienummer = Right(cpr, 4)
  Response.Write foedselsdag & "-" & serienummer & " er et gyldigt CPR-nummer."
Else
...
...
...

istedet for:
If check = kontroltal Or check = 11 Then
foedselsdag = Left(cpr, 6)
serienummer = Right(cpr, 4)
Response.Write foedselsdag & "-" & serienummer & " er et gyldigt CPR-nummer."
Else
...
...
...
Avatar billede roenving Novice
15. februar 2004 - 21:07 #12
Ja, bortset fra at din copy/paste fik fordoblet Then !-)
Avatar billede wilweb Nybegynder
15. februar 2004 - 21:10 #13
Ok, den fandt jeg også:>
Tak for det svarer du lige?
Avatar billede roenving Novice
15. februar 2004 - 21:19 #14
-- ja, og velbekomme '-)

-- men vi skal vel også have thesurfer med på vognen, det var jo ham der fandt scriptet !-)
Avatar billede thesurfer Nybegynder
15. februar 2004 - 21:33 #15
Og theSurfer er med :)
Avatar billede wilweb Nybegynder
15. februar 2004 - 21:34 #16
er det noget jeg har set mig blind på? jeg forhøjer gerne point så i begge får nogle.

Jeg vil jo gerne have at hvis der er fejl i CPR nr. så skal der retuner en fejl kode i Session("fejl"), jeg får fejl koder, men gør jeg noget galt her?

'---userid validering (cpr nr)
if Request.Form("txtUserid") = "" then
    ' Hvis der ikke er indtaster data i formularfeltet, eller
    ' hvis det er første gang siden besøges, vises formularen
    Session("fejl")= "Indtast dit CPR nr.."
    response.Redirect("opret_bruger.asp")
ElseIf Not IsNumeric(Left(Request.Form("txtUserid"), 10)) Then
    Session("fejl")= "Forkert indtastning. Prøv igen"
    response.Redirect("opret_bruger.asp")
    ' Hvis værdien af formularen ikke er et tal, så vises en fejlmeddelelse
Else
    faktor = 432765432
    tempsum = 0
    taeller = 1
    cpr = strUserid

    kontroltal = 1 * Right(cpr, 1)

    If Len(cpr) = 10 Then
    ' Hvis det indtastede cprnummer er netop 10 cifre langt, så gennemføres nedenstående løkke,
    ' der checker gyldigheden af cprnummeret, ciffer for ciffer.
        Do While taeller < 10
            tegn = Mid(cpr, taeller, 1)
            mult = Mid(faktor, taeller, 1)
            If IsNumeric(tegn) Then
            ' Hvis det indtastede tegn på pladsen som variablen taeller peger på er et tal,
            ' så foretages beregningen af tempsum, og tælleren taeller forøges med 1
                tempsum = tempsum + tegn * Mult
                taeller = taeller + 1
            Else
            ' Hvis der er indtastet et ugyldigt tegn i cprnummeret, meldes nedenstående fejl.
                Session("fejl")= "Du har indtastet et ugyldigt tegn"
                response.Redirect("opret_bruger.asp")
            End If
        Loop
        ' Når tempsum endeligt er udregnet, checkes efter nedenstående model
        check = 11 - tempsum Mod 11
        ' Hvis check svarer til cprnummeret sidste ciffer (kontroltal), eller check = 11, er
        ' cprnummeret gyldigt, og nedenstående meddelelse vises
        If tempsum Mod 11 = kontroltal Then
          foedselsdag = Left(cpr, 6)
          serienummer = Right(cpr, 4)
          'Response.Write foedselsdag & "-" & serienummer & " er et gyldigt CPR-nummer."
        Else
              ' Hvis foregående check fejler, er der tale om et ugyldigt cpr-nummer,
                ' og nedenstående meddelelse vises
                Session("fejl")= "Cpr nummeret er ugyldigt"
                response.Redirect("opret_bruger.asp")
        End If
    Else
        Session("fejl")= "Indtast cpr.nr. med 10 cifre - UDEN bindestreg"
        response.Redirect("opret_bruger.asp")
    End If
   
End If
Avatar billede wilweb Nybegynder
15. februar 2004 - 21:40 #17
Jeg har rettet
cpr = strUserid

til:
cpr = Request.Form("txtUserid")

uden virkning
Avatar billede wilweb Nybegynder
15. februar 2004 - 22:09 #18
Jeg kan ikke få det til at virke!  har fundet ud af noget andet!

<%
if Request.Form("cprnr") = "" then
%>
<form action="#" method="post">
<input name="cprnr" type="text" size="10" maxlength="10">
<input name="knap" type="submit" value="test">
</form>
<%
else
cpr = Request.Form("cprnr")
'Testprogram
    if (cprOk(cpr)) then
    response.write("Gyldigt")
    else
    response.write("IKKE Gyldigt")
    end if
end if
'Rutinen der tjekker om CPR nummeret er gyldigt.
function cprOK(cpr)
    if len(cpr) = 10 then
    if IsNumeric(cpr) = true then
        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)
        if ((4*a + 3*b + 2*c + 7*d + 6*e + 5*f + 4*g + 3*h + 2*i + j) mod 11 = 0) then
            cprOK = true
        else
            cprOK = false
        end if
        end if
    else
        cprOK = false
    end if
end function
%>

den ser ud til at virke!
Avatar billede roenving Novice
15. februar 2004 - 22:14 #19
-- og jeg kom forøvrigt til at undre mig over, at du ville have cpr-numre fra dine brugere ?-)

Da de kan bruges til alt muligt grimt, er det simpelthen for dumt at sende dem over nettet uden at have en ssl-forbindelse !-)
Avatar billede wilweb Nybegynder
15. februar 2004 - 22:22 #20
Det er til intranet!
Administrativt, det er til at registrere kursister med!
Avatar billede wilweb Nybegynder
27. februar 2004 - 22:00 #21
Jeg fik ikke jeres forslag til at virke, men der er lidt for at hjælpe til. Håber det er OK...
Avatar billede roenving Novice
27. februar 2004 - 23:46 #22
-- tak for points ;~}
Avatar billede langthjem Nybegynder
22. maj 2006 - 15:29 #23
Avatar billede langthjem Nybegynder
22. maj 2006 - 15:29 #24
Så ikke at tråden var MEGET gammel ... ups ;-)
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