Avatar billede hemmelig_ninja Nybegynder
05. maj 2004 - 11:23 Der er 4 kommentarer og
1 løsning

Cpr-nummer validering (mod / 11)

Hej, jeg er ved at lave en side hvor man skal indtaste sit cpr-nummer, og jeg skal have et script til at chekke om det er et rigtigt cpr-nummer. Hvordan regnes det ud?

Og ja, jeg ved godt at det er modulos 11, men igen, hvordan regens det ud? Med andre ord, jeg leder efter en formel.
Tak på forhånd :)
Avatar billede sostack Nybegynder
05. maj 2004 - 12:24 #1
Avatar billede sostack Nybegynder
05. maj 2004 - 13:27 #2
<?php
if($_POST["knap"])
{
$kontrol = array(4,3,2,7,6,5,4,3,2);
$sum = 0;
$cpr = str_replace("-", "", $_POST["cpr"]);
echo $cpr . "<br />";
for($i = 0; $i < 9; $i++)
{
    $tallet = substr($cpr, $i, 1);
    $sum += $kontrol[$i] * $tallet;
    //echo "kontrol: " . $kontrol[$i]. "<br />tallet: ". $tallet . "<br />Sum: " . $sum . "<br />";
}
$validering = 11 - ($sum % 11);
if($validering == $cpr[9])
{
    echo "OK";
} else {
    echo "fejl";
}
}
?>
<form action='<?php echo $_SERVER["PHP_SELF"] ?>' method='POST'>
<input type='text' name='cpr'><br />
<input type='submit' name='knap' value='Check'>
</form>

//sostack
Avatar billede olebole Juniormester
05. maj 2004 - 15:21 #3
<ole>

sostack >> Kan du få den, du linker til, til at finde sidste ciffer for en kvinde? Won't work here  :)

/mvh
</bole>
Avatar billede sostack Nybegynder
06. maj 2004 - 07:04 #4
olebole>> PRøv med 281259124 ;-)

//sostack
Avatar billede hemmelig_ninja Nybegynder
06. maj 2004 - 09:13 #5
Faktisk havde jeg fundet ud af det allerede igår, lige efter jeg oprettede spørgsmålet (altså formlen) så jeg har lavet siden for et stykke tid siden, men jeg acceptgerer alligevel dit udmærkede svar, hvis i vil se min kode kommer den her. Jeg har dog splittet koden op i flere funktioner, og den er lidt nememre at læse, samt bidderne kan genbruges til alt muligt andet:
function StringSplit($NumString)
{
    for ($i = 0; $i < strlen($NumString); $i++)
    {
        $Arr[$i] = substr($NumString, $i, 1);
    }
    return $Arr;
}

function Mod11Chk($array)
{
    $Value = 0;
    foreach($array as $k=>$v)
    {
        switch($k)
        {
            case 0: $Value += $v*4;    break;
            case 1: $Value += $v*3; break;
            case 2: $Value += $v*2;    break;
            case 3: $Value += $v*7; break;
            case 4: $Value += $v*6;    break;
            case 5: $Value += $v*5; break;
            case 6: $Value += $v*4;    break;
            case 7: $Value += $v*3; break;
            case 8: $Value += $v*2;    break;
            case 9: $Value += $v*1; break;
        }
    }
    if ($Value % 11)
        return false;
    else
        return true;
}


function DateChk($personnr)
{
    $day = substr($personnr, 0, 2);
    $month = substr($personnr, 2, 2);
    $year = substr($personnr, 4, 2);
   
    if ($year < 21)
        $year = "20".$year;
    else
        $year = "19".$year;
       
    return checkdate($month, $day, $year);
}

function PersonnrChk($personnr)
{
    $arr = StringSplit($personnr);
   
    if (Mod11Chk($arr) && DateChk($personnr))
        return true;
    else
        return false;
}
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