webForumDet fria alternativet

Modulus-10

PHPur PHP

3 svar · 737 visningar · startad av greyhound

Medlem sedan maj 20031 472 inlägg
Frågan#1

Jag håller på att skriva en funktion i PHP som genererar en fil till Posten.
Dokumentet som ska följas heter IG_Transportinstruktion_Flatfil2_1.39.pdf och finns att ladda ner på adressen: http://www.posten.se/img/cmt/FriStorlek/transportinstruktion.zip

På ett ställe där står det att jag ska skriva en "Checksiffra modulus-10 för belopp i ören.". Hur jag än gör lyckas jag inte lösa detta. Jag testade en funktion som jag hittade men den stämde vad jag vet.

Någon som har några tips?

Medlem sedan feb. 20022 594 inlägg
#2

Mod 10 innebär väl i det sammanhanget inget annat än ett heltal 0 >= x <= 9? Var du sen ska få checksiffran ifrån eller om det är din att godtyckligt sätta vet jag inte.

Medlem sedan juni 20008 205 inlägg
#3

Är det den här algoritmen du tänker på? http://en.wikipedia.org/wiki/Luhn_algorithm

Medlem sedan maj 20031 472 inlägg
#4

Det slutade med att jag fick göra en egen funktion, mest bara för att jag skulle förstå hur det funkade.

Jag fick ett svar från posten som sa att de använde samma sätt att räkna ut checksiffran som Bankgirot och skulle därför fråga de om hur man räknade ut den. Som tur var hittade jag denna http://www.bgc.se/upload/Gemensamt/Trycksaker/Manualer/10-MODUL.pdf som förklarade allt på ett mycket lätt och bra sätt.

Min funktion:

function mod10check($value) {
  $value = strrev($value);
  $base = 2;
  $sum = 0;
  for ($i = 0; $i <= strlen($value) - 1; $i++) {
    $prod = $value{$i} *  $base;
    if ($prod > 9) {
      $sum = $sum + 1 + $prod % 10;
    } else {
      $sum = $sum + $prod;
    }
    if ($base == 1) {
      $base = 2;
    } else {
      $base = 1;
    }
  }
  return (ceil($sum/10) * 10) - $sum;
}
134 ms totalt · 3 externa anrop · v20260731065814-full.4bcf49fe
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)