Zobrazit příspěvky

Tato sekce Vám umožňuje zobrazit všechny příspěvky tohoto uživatele. Prosím uvědomte si, že můžete vidět příspěvky pouze z oblastí Vám přístupných.


Příspěvky - deema

Stran: [1]
1
Ahoj, jdu prosit o radu jak reverznout výpočet kontrolní číslice...

Mám nějaký kontrolní součet a neznám způsob, jak se počítá.
Jedná se o něco jako je kontrolní číslice v EAN, výpočet je zřejmě velmi podobný.

V PHP používám na ean tohle:

    $number = strrev('12345');
   $total = 0;
   for ($i = 0, $max = strlen($number); $i < $max; $i++) {
      if (($i % 2) == 0) {
         $total += ($number[$i] * 3);
      } else {
         $total += $number[$i];
      }
   }
   $mod = ($total % 10);
   $calculated_checksum = (10 - $mod) % 10;

Neplatí omezení na 8/12 znaků, takže třeba pro 12345 je kontrolní číslice 7, pro 54 je to 3. (v případě EAN)

Příklad reálných vstupů a výstupů o které mi jde:
vstup | checksum
003 | 3
009 | 9
012 | 3
024 | 2
054 | 1

Podle prvních dvou se zdá, že není využíváno připočtení pozice aktuální číslice (jako to má např. Code128) tedy jsou to případy, kdy je dělitel vyšší, než vstup a výstupem je tedy stejné číslo jako na vstupu. Pokud by byly pozice připočítány, můžou být až 4, ale nezdá se mi to ani možné.

Vyzkoušel bruteforcovat jsem statisíce variant s růhnými změnami ve výše uvedené funkci. Násobení sudých čísel 2-100, konečné dělení do 103, připočtení 0-500 ke konečnému výsledku a spoustu podobných variant.
Neúspěšně samozřejmě...  Tam může být úplně cokoli random.
Jak to řešit lépe, než hloupým bruteforce?

Stran: [1]