Rumbeldunk Skrevet 4. juni 2008 Del Skrevet 4. juni 2008 Finnes det et bra PHP-script som kan lage kontrollsiffer til KID-nummer? Trenger MODULUS10. For eksempel kundenummeret er 567951347 så kommer kontrollsiffer bak, og at dette er gyldig ovenfor norske banker m.v. Lenke til kommentar
abrj Skrevet 4. juni 2008 Del Skrevet 4. juni 2008 (endret) Hvor mange siffer har du i kundenummerene da? Har et php-script som jeg kan modde litt, men trenger å vite litt mer. Endret 4. juni 2008 av abrj Lenke til kommentar
Rumbeldunk Skrevet 4. juni 2008 Forfatter Del Skrevet 4. juni 2008 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 Lenke til kommentar
abrj Skrevet 4. juni 2008 Del Skrevet 4. juni 2008 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
Rumbeldunk Skrevet 5. juni 2008 Forfatter Del Skrevet 5. juni 2008 (endret) 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 5. juni 2008 av Rumbeldunk Lenke til kommentar
abrj Skrevet 5. juni 2008 Del Skrevet 5. juni 2008 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
Ernie Skrevet 5. juni 2008 Del Skrevet 5. juni 2008 abrj: Er du helt sikker på at du veit hva du holder på med? Manuell regning tilsier at kontrollsiffer for 1021017 skal være 4. Videre skurrer koden veldig i forhold til denne artiklen om MOD10 i wikipedia. Lenke til kommentar
abrj Skrevet 5. juni 2008 Del Skrevet 5. juni 2008 (endret) OBS... Oppdaget at det var MOD11 jeg har brukt Sorry!!!! I følge Wikipedia brukes også MOD11 http://no.wikipedia.org/wiki/MOD11 Endret 5. juni 2008 av abrj Lenke til kommentar
Gjest Slettet+142 Skrevet 5. juni 2008 Del Skrevet 5. juni 2008 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
abrj Skrevet 6. juni 2008 Del Skrevet 6. juni 2008 Hei mariyo. Den koden funket jo kjempebra! Lenke til kommentar
Lokaltog Skrevet 6. juni 2008 Del Skrevet 6. juni 2008 (endret) 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å. Endret 6. juni 2008 av Lokaltog 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å