webForumDet fria alternativet

Modulus-10

3 svar · 737 visningar · startad av greyhound

greyhoundMedlem sedan maj 20031 472 inlägg
#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?

EkströmMedlem 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.

spangoMedlem sedan juni 20008 205 inlägg
#3

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

greyhoundMedlem 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;
}
132 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)