Avatar billede Slettet bruger
30. november 2004 - 21:40 Der er 8 kommentarer og
1 løsning

Funktion der kan beregne kontrolcifer for FI 71 kort

Hej

Jeg skal bruge en php funktion der retunere kontrolciferet til betalingsidentifikationen på de 15 tegn. Det består af 14 tegn og skal derefter beregne hvad det 15. cifer skal være.

Nogen der vil prøve at kigge på dette.

Til FI 71 indbetalingskort
Avatar billede detox Nybegynder
30. november 2004 - 22:00 #1
Jeg kan da lige se på det.
Avatar billede detox Nybegynder
30. november 2004 - 22:06 #2
function tjek_ciffer($tal) {
    $vtal = 1;
    $total = 0;
    for ($i=0;$i<14;$i++) {
        $res = $vtal*$tal[$i];
        if ($res>9) $res = $res-9;
        $total += $res;
        $vtal = $vtal==1 ? 2 : 1;
    }
    $kciffer = 10 - fmod($total,10);
    if ($kciffer == $tal[14]) return true;
    else return false;
}

$nummer = '026840149965328';
if (tjek_ciffer($nummer)===true) echo "Ok";
else echo "Ikke ok";
Avatar billede detox Nybegynder
30. november 2004 - 22:15 #3
Manglede lige et tjek:

function tjek_ciffer($tal) {
    $vtal = 1;
    $total = 0;
    for ($i=0;$i<14;$i++) {
        $res = $vtal*$tal[$i];
        if ($res>9) $res = $res-9;
        $total += $res;
        $vtal = $vtal==1 ? 2 : 1;
    }
    $kciffer = 10 - fmod($total,10);
    $kciffer = $kciffer==10 ? 0 : $kciffer;
    if ($kciffer == $tal[14]) return true;
    else return false;
}
Avatar billede Slettet bruger
30. november 2004 - 23:22 #4
Den skal ikke tjekke, men skal finde den....
Avatar billede detox Nybegynder
01. december 2004 - 00:04 #5
function kontrolciffer($tal) {
    $vtal = 1;
    $total = 0;
    for ($i=0;$i<14;$i++) {
        $res = $vtal*$tal[$i];
        if ($res>9) $res = $res-9;
        $total += $res;
        $vtal = $vtal==1 ? 2 : 1;
    }
    $kciffer = 10 - fmod($total,10);
    $kciffer = $kciffer==10 ? 0 : $kciffer;
    return $kciffer;
}

$nummer = '02684014996532';
echo kontrolciffer($nummer);
Avatar billede detox Nybegynder
01. december 2004 - 00:15 #6
Eller:

function kontrolciffer($t) {
    $v=1;
    $s=0;
    for ($i=0;$i<14;$i++) {
        $r=$v*$t[$i];
        if ($r>9) $r=$r-9;
        $s+=$r;
        $v=$v==1?2:1;
    }
    return fmod(10-fmod($s,10),10);
}
Avatar billede caztor Praktikant
28. december 2007 - 00:54 #7
Jeg ved det er et gammelt indlæg, men der er en fejl i koden, da der skal vægtes fra højre. herunder er den rette kode med fuld tekst output:

function modulus($t) {
    $t=str_pad($t, 14, 0, STR_PAD_LEFT);
    $v=1;
    $s=0;
    for ($i=0;$i<14;$i++) {
        $r=$v*$t[$i];
        if ($r>9) $r=$r-9;
        $s+=$r;
        $v=$v==1?2:1;
    }
    return $t.fmod(10-fmod($s,10),10);
}
Avatar billede detox Nybegynder
28. december 2007 - 12:54 #8
Ja, 3 år gammelt. Men skulle nogle have brug for koden er det da rart at den fungerer så godt som muligt. Så tak for din rettelse!

PS: Der er ikke decideret fejl i koden, men rettelsen tilføjer evt. foranstillede "nuller" og returnerer hele tallet i modsætning til kun kontrolcifferet.
Avatar billede caztor Praktikant
28. december 2007 - 13:08 #9
Lidt fejl er der, for når man angiver en ulige antal cifre til beregning af kontrolcifferet så får man forkert resultat. De foranstillede "nuller" gør at "vægtningen" bliver sat korrekt og dermed bliver beregningen korrekt.

Men tak for en god kode, jeg har søgt rundt på nettet og dette er absolut den bedst skrevne funktion til at udføre dette lille job ;)
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