Avatar billede dj_jens85 Nybegynder
02. januar 2007 - 13:28 Der er 26 kommentarer og
1 løsning

Cpr validerings script.

Der skulle vel ikke være nogen som der sidder med en script,
som går ind og tjekker om ens cpr er gyldigt og om man er en m/k i .ASP ?

På forhånd tak.
Avatar billede Slettet bruger
02. januar 2007 - 13:35 #1
Fremgangs måden er:
Alle tallene i dit CPR nummer skal ganges med et andet.
110982 4886 (Har bare skrevet nogen tal)
1. tal => (1) * 4
2. tal => (1) * 3
3. tal => (0) * 2
4. tal => (9) * 7
5. tal => (8) * 6
6. tal => (2) * 5

7. tal => (4) * 4
8. tal => (8) * 3
9. tal => (8) * 2
10. tal => (6) * 1

Disse tal skal plusses med hinanden, og derefter skal det divideres med 11.
er tallet divideret med 11 et helt tal (og ikke 0) så er det gyldigt.
Avatar billede Slettet bruger
02. januar 2007 - 13:36 #2
(Har lavet det i PHP derfor jeg bare nævner fremgangs måden, så kan du måske selv lave det)
Avatar billede dj_jens85 Nybegynder
02. januar 2007 - 13:38 #3
Jeg har siddet og læst de ting på andre sider og deres fremgangsmåde. men jeg kunne godt tænke mig at se hvordan i andre vil lave den ?

Bare for at se om jeg er helt galt på den :-)
Avatar billede dj_jens85 Nybegynder
02. januar 2007 - 13:38 #4
Det skal så også siges jeg er ny til asp. Har arbejdet minimalt i det ;)
og ville sætte pris på lidt hjælp ^^
Avatar billede Slettet bruger
02. januar 2007 - 13:39 #5
Nu ved jeg ikke om du kan PHP, men her er mit script


<?PHP
if(isset($_POST['go'])) {
    $arr = array();
    if(is_numeric($_POST['cpr'])) {
        for($i=0; $i<10; $i++) {
            switch ($i) {
                case 0: $numb = 4;
                    break;
                case 1: $numb = 3;
                    break;
                case 2: $numb = 2;
                    break;
                case 3: $numb = 7;
                    break;
                case 4: $numb = 6;
                    break;
                case 5: $numb = 5;
                    break;
                case 6: $numb = 4;
                    break;
                case 7: $numb = 3;
                    break;
                case 8: $numb = 2;
                    break;
                case 9: $numb = 1;
                    break;
            }
            $arr[] = (substr($_POST['cpr'], $i, 1) * $numb);
        }
        //echo implode(",", $arr);
        $facit = $arr[0];
        for($n=1; $n<10; $n++) {
            $facit += $arr[$n];
        }
       
        /*
        print "<pre>";
        print_r($arr);
        print "</pre>";
        */
        $facit = $facit/11;
        if(!strstr($facit, ".") && ($facit != 0)) {
            echo "Gyldigt CPR nummer!";
        } else {
            echo "Ugyldigt CPR nummer!";
        }
    } else {
        echo "Kun tal!";
    }
}
?>
<form action="" method="post">
Indtast dit CPR nummer i feltet, f.eks. 2003060000<br />
<input type="password" name="cpr" maxlength="10" />
<input type="submit" name="go" value="Go" />
</form>
Avatar billede dj_jens85 Nybegynder
02. januar 2007 - 13:40 #6
Det kan jeg desværre ikke.
er det måske noget som kan oversættes til asp :-)
Avatar billede Slettet bruger
02. januar 2007 - 13:41 #7
Jeg kan ikke ASP.
Men jeg kan lave kommentarer i scriptet, så du kan se hvad præcis det gør, hvis du har lyst?
Avatar billede dj_jens85 Nybegynder
02. januar 2007 - 13:51 #8
Selvfølgelig :-)
Avatar billede jensgram Nybegynder
02. januar 2007 - 14:32 #9
Måske en Java-version kan hjælpe på forståelsen:

    /**
    * Validates a Social Security Number based on the Modulo-11 algorithm (http://www.opfinderen.dk/sites/74/).
    *
    * @param socSecNum The Social Secure Number to validate.
    * @return Returns true if the SSN is valid.
    */
    public static boolean isValidSocSecNum(String socSecNum) {
        boolean valid = socSecNum.matches("^(3[01]|[12]\\d|0[1-9])(1[0-2]|0[1-9])\\d{6}$");
       
        if (valid) {
            int[] weight = {4, 3, 2, 7, 6, 5, 4, 3, 2, 1};
            int controlSum = 0;
           
            for (int i = 0; i < 10; i++) {
                int digitSsn = Integer.parseInt(socSecNum.substring(i, i + 1));
               
                controlSum += digitSsn * weight[i]; // SSN-digit multiplied with its corresponding weight.
            }
           
            valid = (controlSum % 11 == 0);
        }
       
        return valid;
    }



int[] weight : Kan opfattes som et array med 10 elementer. De enkelte tal i CPR-nummeret ganges med den tilsvarende vægtning. Summen af disse produkter (tal * vægtning) skal give 0 i rest ved heltalsdivision med 11.
Avatar billede jensgram Nybegynder
02. januar 2007 - 14:40 #10
Hallo! Fulgte lige mit eget link (fra kommentaren):

<%
Function CPROK(Streng)
  Dim Nummer, Sum
  Nummer = Trim(Replace(Streng, "-", ""))
  If Len(Nummer) <> 10 Or Not IsNumeric(CStr(Nummer)) Then Exit Function
  Check = Array(4, 3, 2, 7, 6, 5, 4, 3, 2, 1)
  Sum = 0
  For i = 0 To 9
      Sum = Sum + CInt(Mid(Nummer, i, 1)) * Check(i)
  Next
  If Sum Mod 11 = 0 Then CPROK = True
End Function

If CPROK("250342-1247") Then
' Gyldigt
Else
' Ugyldigt
End If
%>
Avatar billede jensgram Nybegynder
02. januar 2007 - 14:42 #11
M/K kan testes via sidste tal:


If CInt(Mid(Nummer, 9, 1)) Mod 2 = 0 Then [lige tal -> kvinde]
Avatar billede dj_jens85 Nybegynder
02. januar 2007 - 14:43 #12
Hvordan skal den så se ud hvis det hele skal sidde sammen ?
Avatar billede jensgram Nybegynder
02. januar 2007 - 15:00 #13
Sidde sammen? Hvordan?
Avatar billede jensgram Nybegynder
02. januar 2007 - 15:07 #14
<%
Function CPROK(Streng)
  Dim Nummer, Sum
  Nummer = Trim(Replace(Streng, "-", ""))
  If Len(Nummer) <> 10 Or Not IsNumeric(CStr(Nummer)) Then Exit Function
  Check = Array(4, 3, 2, 7, 6, 5, 4, 3, 2, 1)
  Sum = 0
  For i = 0 To 9
      Sum = Sum + CInt(Mid(Nummer, i, 1)) * Check(i)
  Next
  If Sum Mod 11 = 0 Then CPROK = True
End Function

If CPROK("250342-1247") Then
' Gyldigt

  CInt(Mid(Nummer, 9, 1)) Mod 2 = 0 Then
  ' Du er en kvinde
  Else
  ' Du er en mand
  End If

Else
' Ugyldigt
End If
%>
Avatar billede dadane Novice
02. januar 2007 - 15:12 #15
Der er bare lige det problem at vi er ved at løbe tør for CPR numre, - så CPR registeret har påberåbt sig retten til at droppe CPR numeret checksum der hvor det er nødvendigt (de første ca. 270 personer af hvert køn vil altid få et CPR nummer med korrekt checksum).

Så der kan forekomme personer med et CPR nummer som du jfr. ovenstående algoritmer vil kalde illegalt!
Avatar billede dadane Novice
02. januar 2007 - 15:13 #16
Citat: "Løsningen

De principper, der ligger bag den valgte løsning, kan ultrakort beskrives således: På hver fødselsdag tildeles først som hidtil personnumre med kontrolciffer (personnummerets 10. ciffer). Når (hvis) de ca. 540 personnumre med kontrolciffer, der er til rådighed på en bestemt fødselsdato, er brugt (ca. 270 til kvinder og ca. 270 til mænd), tildeles personnummer, hvortil der ikke er tilknyttet kontrolciffer.

Med løsningen vil kapaciteten i personnummersystemet mod nu 540 personnumre pr. fødselsdato i stedet blive forøget til 1) 4.000 personnumre pr. fødselsdato i årene 1858 - 1936, 2) 6.000 personnumre pr. fødselsdato i årene 1937 – 2036 og 3) 4.000 personnumre pr. fødselsdato i årene 2037 – 2057."

Kilde: http://www.cpr.dk/cpr/site.aspx?p=172&ArticleID=4229

Ang. det med fødselsårene, - se da: http://cpr.dk/cpr_artikler/Files/Fil1/4225.pdf
Avatar billede dadane Novice
02. januar 2007 - 15:14 #17
Et godt råd til alle kvinder må være at forsøge at føde tidligt, - så deres børn kan få et "rigtigt" cpr nummer :-)
Avatar billede dj_jens85 Nybegynder
02. januar 2007 - 15:35 #18
Dadane> :-) hehe ja kan kun give dig ret :P

Jensgram > Oki, er der måske også en mulighed for at hvis jeg vil have det sådan her. Kvinder kommer med Rød skrift og drenge med blå :) kan man det ?
Avatar billede jensgram Nybegynder
02. januar 2007 - 15:40 #19
Ja, det kan du helt sikkert, men jeg kan ikke et ord ASP :P

Det er blot et spørgsmål om at printe noget HTML ved

  CInt(Mid(Nummer, 9, 1)) Mod 2 = 0 Then
  ' Du er en kvinde (rød)
  Else
  ' Du er en mand (blå)
  End If

... men jeg ved så lidt om ASP, at jeg ikke ved hvordan man laver en print / echo / sysout ;)
Avatar billede dj_jens85 Nybegynder
02. januar 2007 - 17:36 #20
Er der virkeligt ikke nogen der ved lidt om asp som der kunne tænke sig at hjælpe mig lidt ?
Avatar billede dj_jens85 Nybegynder
02. januar 2007 - 17:37 #21
Jensgram > Heh, nej rigtigt nok ;)
Avatar billede jensgram Nybegynder
02. januar 2007 - 18:04 #22
<%
Function CPROK(Streng)
  Dim Nummer, Sum
  Nummer = Trim(Replace(Streng, "-", ""))
  If Len(Nummer) <> 10 Or Not IsNumeric(CStr(Nummer)) Then Exit Function
  Check = Array(4, 3, 2, 7, 6, 5, 4, 3, 2, 1)
  Sum = 0
  For i = 0 To 9
      Sum = Sum + CInt(Mid(Nummer, i, 1)) * Check(i)
  Next
  If Sum Mod 11 = 0 Then CPROK = True
End Function

If CPROK("250342-1247") Then
  Response.Write "Gyldigt CPR"

  If CInt(Mid(Nummer, 9, 1)) Mod 2 = 0 Then
    Response.Write "... og du er en <span style=\"color: red\">kvinde</span>"
  Else
    Response.Write "... og du er en <span style=\"color: blue\">mand</span>"
  End If

Else
  Response.Write "Ugyldigt!"
End If
%>


Oder was?
Avatar billede kinderaeg Nybegynder
05. januar 2007 - 11:36 #23
Det må næsten være rigtigt, bort set fra at \ ikke er escape i VB (ASP). Brug i stedet "" eller ' i din span ;)

If CInt(Mid(Nummer, 9, 1)) Mod 2 = 0 Then
  Response.Write "... og du er en <span style=""color: red"">kvinde</span>"
Else
  Response.Write "... og du er en <span style=""color: blue"">mand</span>"
End If
Avatar billede jensgram Nybegynder
05. januar 2007 - 16:58 #24
kinderaeg > ja, så meget ved _jeg_ om APS :P
Avatar billede jensgram Nybegynder
03. februar 2007 - 15:24 #25
Er vi kommet videre?
Avatar billede dj_jens85 Nybegynder
19. februar 2007 - 14:48 #26
der er vi :-)

Undskyld forsinkelsen, giv mig et svar og du er dine point værdig ;)
Avatar billede jensgram Nybegynder
19. februar 2007 - 17:13 #27
Svar
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