Avatar billede tfswebguy Nybegynder
01. august 2005 - 14:02 Der er 4 kommentarer og
1 løsning

cpr validering. hvor er fejlen i koden her?

if(isset($_POST['cpr']) AND $_POST['cpr'] != ''){
  if(strlen($_POST['cpr']) < '10'){
    $fejl = "". @$fejl ."<br>CPR nummeret er for kort";
  }
  if(strlen($_POST['cpr']) > '10'){
    $fejl = "". @$fejl ."<br>CPR nummeret er for langt";
  }
  $dag = 0 + substr($_POST['cpr'], 0, 2);
  $maned = 0 + substr($_POST['cpr'], 2, 2);
  $aar = 0 + substr($_POST['cpr'], 4, 2);
  if($dag < '1' || $dag > '31'){
    $fejl = "". @$fejl ."<br>Tegn 1 og 2 er forkerte";
  }
  if($dag == '31' && ($maned == '2' || $maned == '4' || $maned == '6' || $maned == '7' || $maned == '9' || $maned == '11') || $dag == '30' && $maned = '2'){
    $fejl = "". @$fejl ."<br>Der er ikke ". $dag ." dage i ". $maned .". måned";
  }
  if($maned < '1' || $maned > '12'){
    $fejl = "". @$fejl ."<br>Tegn 3 og 4 er forkerte";
  }
  for ($i=0; $i<10; $i++){
    $c[$i] = substr($_POST['cpr'], $i, 1);
  }
  $cpr_checksum = ($c[0] * 4) + ($c[1] * 3) + ($c[2] * 2) + ($c[3] * 7) + ($c[4] * 6) + ($c[5] * 5) + ($c[6] * 4) + ($c[7] * 3) + $c[9];
  $cpr_checksum = $cpr_checksum / 11;
  if($cpr_checksum != ''){
    $fejl = "". @$fejl ."<br>CPR nummeret er ugyldigt";
  }
}

Hvad er der galt med denne her CPR validering? Den melder fejl, selvom CPR er rigtig
Avatar billede roenving Novice
01. august 2005 - 14:06 #1
Du mangler

($c[8] * 2) !-)
Avatar billede roenving Novice
01. august 2005 - 14:13 #2
Altså:

$cpr_checksum = ($c[0] * 4) + ($c[1] * 3) + ($c[2] * 2) + ($c[3] * 7) + ($c[4] * 6) + ($c[5] * 5) + ($c[6] * 4) + ($c[7] * 3) + ($c[8] * 2) + $c[9];

-- og så skal du teste om 11 går op i checksummen, mon ikke du i php skal bruge den samme operator til heltalsdivision som javascript bruger:

... + ($c[8] * 2) + $c[9];
if($cpr_checksum % 11 != 0){
Avatar billede tfswebguy Nybegynder
01. august 2005 - 14:19 #3
Der manglede sq $c[8] * 2 :D
Og ja, så skulle der bruges % i stedet for /

Har lavet den en gang, hvor den virkede, men her svipsede den lige :$

Takker for hjælpen roenving :)
Avatar billede tfswebguy Nybegynder
01. august 2005 - 14:20 #4
Hører nok fra mig igen på et tidspunkt.. At skifte til IIS fra Apache, er sq som at skulle lære at gå igen :s
Avatar billede roenving Novice
01. august 2005 - 14:26 #5
-- og jeg takker 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