Gå til innhold

Klasse for å generere personnummer


Anbefalte innlegg

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
Videoannonse
Annonse

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 av arnizzz
Lenke til kommentar
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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...