Feeds:
Wpisy
Komentarze

Archive for the ‘Programowanie’ Category

Tak się jakoś zdarzyło, że postawiono przede mną zadanie generowania kolejnych numerów „R” naklejanych na listy polecone Poczty Polskiej. Zarówno krajowych, jak i zagranicznych. Oczywiście są to numery kolejne, z tym jednak hakiem, że każdy z nich opatrzony jest pewnym kodem kontrolnym. Wiedza na temat jak ten kod obliczyć jest w takim wypadku bezcenna i wcale nie taka łatwa do zdobycia jak byśmy chcieli. Rozwiązanie znalazłem i zamierzam się teraz nim podzielić.

Google bywa pomocne, ale tym razem nie spełniło oczekiwań. Po kilkunastu stronach trafiłem na szczęście na opis algorytmu dla przesyłek krajowych, ale nie był on do końca wiarygodny (pochodził z jakiegoś forum, na którym wątek nie był zakończony). Na szczęście przewijające się tu nazwy pokierowały mnie ku kodom kreskowym GS1-128 i Instytutowi Logistyki i Magazynowania. Tu informacja była wiarygodna: algorytm GS1.

Niestety z przesyłkami zagranicznymi nie poszło już tak dobrze. Nigdzie nie znalazłem nawet wzmianki. Rodzajów kodów kreskowych jest dość sporo. Nie pozostało mi nic innego jak sprawdzić wszystkie możliwości lub spróbować rozgryźć go samodzielnie. Wybrałem drugą możliwość.

Miałęm 48 kolejnych kodów kreskowych z listów poleconych zagranicznych. Dość szybko udało mi się ustalić, że ciąg utworzony z sum kontrolnych powtarza się co 11 kodów. To pierwsza ważna informacja: suma kontrolna liczona jest modulo 11. Metodą prób i błędów ustaliłem, że waga dla ostatniej liczby wynosi 7, a dodatkowo następuje transformacja 11 – x mod 11, a wynik 10 zamieniany jest na 0 i 11 na 5. Pozostało jeszcze ustalić pozostałe 7 wag.

48 kodów to zdecydowanie za mało, żeby się to w pełni udało. Drugą wagę ustaliłem bez większego trudu (wynosi 9). Na moje szczęście kody obejmowały przejście przez 100, więc miałem też prawdopodobną trzecią wagę (5). Więcej wycisnąć się z tej próbki nie da, ale zdobyte wagi to już dobry materiał do ponownego googlania, które w efekcie dało… Danish PTT 39 Barcode.

Kod Poczty Polskiej jest nieco krótszy niż oryginalny, ale wagi pasują. Przykład lepiej ilustruje niż nawet najlepiej opisany algorytm, dlatego publikuję kod działających funkcji do liczenia sumy kontrolnej. Są one pozbawione jakiegokolwiek mechanizmu sprawdzania poprawności danych wejściowych i napisane w PL/SQL. Jest on na tyle prosty, że każdy kto miał styczność z programowaniem adoptuje go do dowolnego języka. A oto i kod funkcji. Mam nadzieję, że się przyda.

Reklamy

Read Full Post »

« Newer Posts