_dundun_ Skrevet 8. juni 2009 Del Skrevet 8. juni 2009 Her er en liten klasse jeg slang sammen, inspirert av bråket rundt telefonkatalogen og fødselsdager. Input er dag, måned, år og kjønn, output er en liste over gyldige personnumre for personer født denne dagen. class personNummer { //Returnerer alle mulige personnummer for en person av angitt kjønn født på angitt dag. Sex="m" gir mann, "k" gir kvinne ingenting gir begge. //Kun korrekt for personer som har fått personnummer ved fødsel mellom 1900 og 2039. function generate($d, $m, $y, $sex = false) { $output = array(); if($y > 0 && $y < 39) { $from = 500; $to = 999; } else { $from = 0; $to = 499; } if($sex == "m") { $s = array(1,3,5,7,9); } elseif($sex == "k") { $s = array(2,4,6,8); } else { $s = array(1,2,3,4,5,6,7,8,9); } for($i = $from; $i <= $to; $i++) { $nr = $d.$m.$y; $tmp = str_pad($i, 3, "0", STR_PAD_LEFT); $nr .= $tmp; if(in_array($tmp[2], $s) && $this->kontrollSiffer($nr)) { $tmpfull = $nr; $tmpfull .= $this->kontrollSiffer($nr); $output[] = $tmpfull; } } return $output; } //Input: de ni første sifre i et personnummer, output: de to siste dersom personnummeret er gyldig, ellers boolean false. function kontrollSiffer($n) { $kontroll1 = 11 - ( ( (3*$n[0]) + (7*$n[1]) + (6*$n[2]) + (1*$n[3]) + (8*$n[4]) + (9*$n[5]) + (4*$n[6]) + (5*$n[7]) + (2*$n[8]) ) % 11 ); if($kontroll1 == 11) $kontroll1 = 0; $kontroll2 = 11 - ( ( (5*$n[0]) + (4*$n[1]) + (3*$n[2]) + (2*$n[3]) + (7*$n[4]) + (6*$n[5]) + (5*$n[6]) + (4*$n[7]) + (3*$n[8]) + (2*$kontroll1) ) % 11); if($kontroll2 == 11) $kontroll2 = 0; if($kontroll1 != "10" && $kontroll2 != "10") { return $kontroll1.$kontroll2; } else { return false; } } } Lenke til kommentar
Wackamole Skrevet 8. juni 2009 Del Skrevet 8. juni 2009 (endret) Kunne du gitt oss et eksempel på bruk? Jeg prøver med denne, men får ikke output? $New_person = new personNummer(); $New_person->generate('06','06','1990','m'); Endret 8. juni 2009 av Famen Lenke til kommentar
arnizzz Skrevet 9. juni 2009 Del Skrevet 9. juni 2009 (endret) Den returner en array med mange personummer som du må loope igjennom. prøv: $New_person = new personNummer(); $arrPersonnummer = $New_person->generate('06','06','1990','m'); foreach($arrPersonummer as $key => $value) { echo $key . " :" . $value . "<br/>"; } Skjønner ikke helt hva dette har i en KLASSE å gjøre. Dette er jo bare to funksjoner. Ikke noe poeng å opprette et objekt spør du meg. Endret 9. juni 2009 av arnizzz Lenke til kommentar
_dundun_ Skrevet 9. juni 2009 Forfatter Del Skrevet 9. juni 2009 Den returner en array med mange personummer som du må loope igjennom. prøv: $New_person = new personNummer(); $arrPersonnummer = $New_person->generate('06','06','1990','m'); foreach($arrPersonummer as $key => $value) { echo $key . " :" . $value . "<br/>"; } Skjønner ikke helt hva dette har i en KLASSE å gjøre. Dette er jo bare to funksjoner. Ikke noe poeng å opprette et objekt spør du meg. For å forenkle cut&paste for folk. Greit å holde koden fin og modulær. Men du har jo helt rett - uten utvidelser er det ikke noen vits å ha dette i en klasse. Det er forresten en liten feil i reglene for personnummer - 0 er et lovlig tall for kvinner, så arrayet med oddetall må ha med dette sifferet også. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå