Avatar billede foxmulder58 Praktikant
09. august 2005 - 00:34 Der er 14 kommentarer og
1 løsning

CPR validator

Hej Eksperter,

Er der nogen der har et script liggende der kan validere et cpr nr (gerne med <form>


Eller måske kan henvise til et link?


mvh
Mads
Avatar billede foxmulder58 Praktikant
09. august 2005 - 00:36 #1
JEg er træt og kigger ind i imorgen for at se....

godant allesammen ses her på eksperten.dk imorgen?


mvh
Mads
Avatar billede big_ossi Nybegynder
09. august 2005 - 00:46 #2
Hey

ved ikke hvordan man laver det, men man skal nok huske på at der kommer nye cpr nr når man laver det.

Go'nat :)
Avatar billede roenving Novice
09. august 2005 - 00:56 #3
Der er linet up til at cpr-valideringen med modulus-11-tingen kan droppes, men sidste gang, jeg checkede det, var det 1. januar 1950, som var tættest på at have et problem med under 20 muligheder for nye tildelinger !-)

-- og så var der nogle datoer i 70'erne af lignende kaliber, 1/1 og 1/7-ting, så vi har faktisk en ganske rimelig chance for at beholde denne simple validering ...

-- og en simpel clientside validering kan se sådan ud:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<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(/\d{6}\-?\d{4}/)){
    var aar = +cpr.substr(4,2)+2000;
    aar -= (aar>new Date().getFullYear())?100:0;
    var maaned = +cpr.substr(2,2)-1;
    var dag = +cpr.substr(0,2);
    var dato = new Date(aar,maaned,dag);
    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&&dato.getFullYear()==aar&&dato.getMonth()==maaned&&dato.getDate()==dag)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>

-- og den tester ikke for om det mønster, der er for årstal udfra første ciffer i løbenummeret måske resulterer i en invalid dato !-)
Avatar billede hmortensen Nybegynder
09. august 2005 - 02:14 #4
Vil tro den her kan bruges. Noget at brokke sig over roenving ? ;)
function CPRCehck($cpr)
{
    if (strlen($cpr) == 10)
    {
        $a = substr($cpr, 0, 1);
        $b = substr($cpr, 1, 1);
        $c = substr($cpr, 2, 1);
        $d = substr($cpr, 3, 1);
        $e = substr($cpr, 4, 1);
        $f = substr($cpr, 5, 1);
        $g = substr($cpr, 6, 1);
        $h = substr($cpr, 7, 1);
        $i = substr($cpr, 8, 1);
        $j = substr($cpr, 9, 1);
        if ((4*$a + 3*$b + 2*$c + 7*$d + 6*$e + 5*$f + 4*$g + 3*$h + 2*$i + $j)%11 == 0)
            return true;
        else
            return false;
    } else {
        return false;
    }
}
Avatar billede roenving Novice
09. august 2005 - 02:23 #5
Tjah, hvorfor ikke bekymre sig over om der står 77850387xx ?-)
Avatar billede hmortensen Nybegynder
09. august 2005 - 02:29 #6
Den vil da blive afvist, men du ville lave et tjek først, så udregning ikke vil blive forsøgt ?
Avatar billede roenving Novice
09. august 2005 - 02:33 #7
Hvis nu xx var valgt, så den faktisk leverede en korrekt modulus-11-værdi (jeg gad ik' li'e at konstruere dem ?-)
Avatar billede hmortensen Nybegynder
09. august 2005 - 02:41 #8
Ah, troede du mente ulovlige tegn ;)
Avatar billede roenving Novice
09. august 2005 - 02:44 #9
Men dem som engang bliver født den 77/85-2003 vil sikkert være glade for at deres cpr-nummer er validt !-)
Avatar billede sukos Juniormester
09. august 2005 - 09:04 #10
checkdate() er vel meget relevant?
http://dk2.php.net/manual/da/function.checkdate.php
Avatar billede foxmulder58 Praktikant
09. august 2005 - 09:23 #11
tak for svarene!

Jeg håber du smider et svar Roenving?


mvh
Mads
Avatar billede foxmulder58 Praktikant
09. august 2005 - 09:25 #12
Jeg ved ike om i andre synes at det er fair at jeg giver Roenving alle point her??

Men skriv lige hvis i er af anden mening....så vi undgår ballade :]

Men ellers tilfalder point roenving her!

mvh
Mads
Avatar billede roenving Novice
09. august 2005 - 10:38 #13
Du har jo stadig brug for den server-side validering, selvom der selvfølgelig bør være et system, I kan få adgang til, som validerer direkte på nummeret !-)

-- els velbekomme '-)
Avatar billede foxmulder58 Praktikant
09. august 2005 - 10:55 #14
Jeps! tak for hjælpen.!
Avatar billede roenving Novice
09. august 2005 - 12:36 #15
-- og tak for point ;~}
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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