Gå til innhold

MOD10 og PHP, til KID-nummer


Anbefalte innlegg

Videoannonse
Annonse

Hei

 

Det spiller ikke noen rolle hvor langt det er. Men 6-10 siffer kanskje. Bare det fungerer er det greit for meg. Genererer scriptet ditt ID selv, eller blir det hentet fra ID i database?

 

Hvis du har en bra kode er jeg takknemelig :thumbup:

Lenke til kommentar

Her er skriptet.

 

Som du ser har jeg valgt et 7-sifret kundenummer som jeg her har valgt å sette inn manuelt, men som lett lar seg gjøre å hente ut fra en database. Du må ikke endre $kundenr uten å endre det nedover i koden.

 

Nederst skriver den ut originalt kundenr og den nye kidden, men dette kan du jo endre som du selv vil. Du kan ta bort de 4 siste echo-linjene og erstatte de med den koden du selv vil. Håper du ble litt klokere nå

 

Så vidt jeg vet må du ha avtale med banken for å tilby kidnr

 

<?php
{
$kundenr = "1021017";
$kundenrsnudd = strrev($kundenr);
$splitstring = str_split($kundenrsnudd);
$beregn = $splitstring[0]*2+$splitstring[1]*3+$splitstring[2]*4+$splitstring[3]*5+$splitstring[4]*6+$splitstring[5]*7+$splitstring[6]*2;
$tall_del = $beregn/11;
$tall_mellom = explode('.', $tall_del);
$tall2 = $tall_mellom[0];
$deletall = 11*$tall2;
$tallberegn = $beregn - $deletall;
$kontrollsiffer = 11-$tallberegn;

if($kontrollsiffer == 1)
{
$kontrollsifferet = "-";
}
elseif($kontrollsiffer == 10)
{
$kontrollsifferet = "-";
}
else
{
$kontrollsifferet = $kontrollsiffer;
}

$array = array($kundenr. $kontrollsifferet);
$kidnr = implode(".", $array);
}
{
echo"Originalt kundenr.: ";
echo $kundenr;
echo"<br>KID: ";
echo $kidnr;
}
?>

Lenke til kommentar

Hei,

 

Det ser bra ut, men hva er disse bindestrekene?

 

På Kundenummer 1021015 blir KID 1021015- hvor kontrollsifferet er en -.

 

Skal det være NULL? Altså

 

if($kontrollsiffer == 1)
{
$kontrollsifferet = "1"; // er det 1 eller 0?
}
elseif($kontrollsiffer == 10)
{
$kontrollsifferet = "0"; // 1+0 er 0 i Luhn?
}

 

* Skal få en avtale for KID.

Endret av Rumbeldunk
Lenke til kommentar

Det som jeg har satt opp i koden min, du må ikke endre på det! Hvis kontrollsifferet er 1 eller 10, skal ikke de brukes men kun en strek (-). Så min kode er rett! Har programert dette i henhold til kravene til MOD10

Lenke til kommentar
Gjest Slettet+142

Se om jeg kan bidra litt da;

 

<?php

$kid_u = "234567";
$kontrollsiffer = mod10($kid_u);
echo $kid_u . $kontrollsiffer;


function mod10( $kid_u ){

$siffer = str_split(strrev($kid_u));
$sum = 0;

for($i=0; $i<count($siffer); ++$i) $sum += tverrsum(( $i & 1 ) ? $siffer[$i] * 1 : $siffer[$i] * 2);

return ($sum==0) ? 0 : 10 - substr($sum, -1);

}

function tverrsum($tall){
return array_sum(str_split($tall));
}
?>

Lenke til kommentar

Enda en måte å gjøre det på:

function mod10($number)
{
 for ($s = 0, $w = 2, $n = (string)$number, $i = strlen($n) - 1; $i >= 0; $i--, ($w % 2 ? $w++ : $w--)) $s += array_sum(str_split(($n{$i} * $w)));
 return 10 - ($s % 10);
}

Edit: Tror den er raskere enn forslaget til mariyo også. :p

Endret av Lokaltog
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å
×
×
  • Opprett ny...