Wpisany przez Tomasz Lubiński,
31 lipca 2007 21:37
Pharmacode two-track jest kodem kreskowym wykorzystywanym w przemyśle farmaceutycznym w celu
kontroli opakowań. Pierwsza część nazwy pochodzi oczywiście od miejsca zastosowania kodu, druga
część mówi nam co nieco o jego budowie. Two-track oznacza, że do odczytu muszą być wykorzystane
dwie ścieżki. Jedna czyta górną część kodu, podczas gdy druga czyta dolną część kodu. Ten kod
kreskowy koduje dane nie w gubości pasków ale poprzez ich wysokość i umiejscowienie. Pierwsza
ścieżka odczytuje paski krótkie dolne oraz długie, natomiast druga odczytuje paski krótkie dolne i długie. Pharmacode two-track może kodować liczbę z zakresu od 4 (dwa paski) do 64570080
(szesnaście pasków) włącznie. Kod zapisywany jest od strony prawej do lewej. Rozmiary jego
składowych elementów są następujące:
Jeżeli przez p oznaczymy pozycję to wartość poszczególnych rodzajów kresek możemy zapisać następująco:
Jak już wpomnieliśmy kod czyta się od prawej do lewej. Początkowo nasz wynik wynosi zero.
Pierwszy pasek po prawej jest długi, wartość długiego paska na pierwszej pozycji wynosi 3.
Dodajemy tą wartość do wyniku, otrzymujemy 3. Kolejny pasek jest paskiem krótkim górnym, jego
wartość odczytana z tabeli wynosi 6 (krótki górny pasek na drugiej pozycji), dodajemy do wyniku
i otrzymujemy 9. Kolejny pasek krótki dolny, jego wartość to 9 (krótki dolny pasek na trzeciej
pozycji), dodajemy do wyniku otrzymując tym samym 18. Kolejny ostatni już pasek krótki górny ma
wartość 54 (górny krótki pasek na czwartej pozycji), dodajemy do wyniku i dostajemy otrzymując
ostateczny rezultat 72.
Ponieważ pharmacode nie zawiera ani znaku sumy kontrolnej, ani znaku startu/końca sekwencji kod może być czytany albo z lewej do prawej albo z prawej do lewej dając różne wartości.
I tak gdyby nasz kod przeczytac "do góry nogami" jego wartość wynosiłaby 97.
Zajmijmy się teraz zamianą danej wartości na kod Pharmacode two-track. Algorytm generowania kodu jest dość prosty. By zamienić daną liczbę na postać kodu wykonujemy kolejne czyności tak długo, jak liczba jest większa od zera:
Przy czym należy zauważyć że paski do wyniku zapisujemy od strony prawej do lewej.
Spróbujmy wygenerować Pharmacode two-track dla wartości liczba = 55.
Początkowo wynik = ''
55 mod 3 = 1. Zatem do wyniku dopisujemy pasek krótki dolny ('B'), wynik = 'B', liczba = 55 - 1 / 3 = 18
18 mod 3 = 0. A więc do wyniku dopisujemy pasek długi ('N'), wynik = 'NB' (wynik zapisujemy od prawej do lewej), liczba = 18 - 3 / 3 = 5
5 mod 3 = 2. Zatem do wyniku dopisujemy pasek krótki górny ('A'), wynik = 'ANB', liczba = 5 - 2 / 3 = 1
1 mod 3 = 1. Tak więc do wyniku dopisujemy pasek krótki dolny ('B'), wynik = 'BANB', liczba = 1 - 1 / 3 = 0
liczba wynosi 0, zatem kończymy nasze obliczenia, wynik = 'BANB' co przedstawione w wersji graficznej wygląda następująco:
- szerokość wszystkich pasków 1 mm,
- szerokość odstępów pomiędzy paskami 1 mm,
- wysokość paska długiego 8-12 mm,
- Wysokość paska krótkiego 4-6 mm.
Pozycja | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
Pasek dolny (below) | 14348907 | 4782969 | 1594323 | 531441 | 177147 | 59049 | 19683 | 6561 | 2187 | 729 | 243 | 81 | 27 | 9 | 3 | 1 |
Pasek górny (above) | 28697814 | 9565938 | 3188646 | 1062882 | 354294 | 118098 | 39366 | 13122 | 4374 | 1458 | 486 | 162 | 54 | 18 | 6 | 2 |
Pasek długi | 43046721 | 14348907 | 4782969 | 1594323 | 531441 | 177147 | 59049 | 19683 | 6561 | 2187 | 729 | 243 | 81 | 27 | 9 | 3 |
Jeżeli przez p oznaczymy pozycję to wartość poszczególnych rodzajów kresek możemy zapisać następująco:
- Pasek krótki dolny = 3p-1
- Pasek krótki górny = 2*3p-1
- Pasek długi = 3*3p-1 = 3p
Ponieważ pharmacode nie zawiera ani znaku sumy kontrolnej, ani znaku startu/końca sekwencji kod może być czytany albo z lewej do prawej albo z prawej do lewej dając różne wartości.
I tak gdyby nasz kod przeczytac "do góry nogami" jego wartość wynosiłaby 97.
Zajmijmy się teraz zamianą danej wartości na kod Pharmacode two-track. Algorytm generowania kodu jest dość prosty. By zamienić daną liczbę na postać kodu wykonujemy kolejne czyności tak długo, jak liczba jest większa od zera:
- jeżeli liczba mod 3 = 0 (jest podzielna przez 3): do wyniku dopisujemy długi pasek, liczba = (liczba - 3)/3
- jeżeli liczba mod 3 = 2: do wyniku dopisujemy krótki górny pasek, liczba = (liczba - 2)/3
- jeżeli liczba mod 3 = 1: do wyniku dopisujemy krótki dolny pasek, liczba = (liczba - 1)/3
Przy czym należy zauważyć że paski do wyniku zapisujemy od strony prawej do lewej.
Przykład:
Spróbujmy wygenerować Pharmacode two-track dla wartości liczba = 55.
Początkowo wynik = ''
55 mod 3 = 1. Zatem do wyniku dopisujemy pasek krótki dolny ('B'), wynik = 'B', liczba = 55 - 1 / 3 = 18
18 mod 3 = 0. A więc do wyniku dopisujemy pasek długi ('N'), wynik = 'NB' (wynik zapisujemy od prawej do lewej), liczba = 18 - 3 / 3 = 5
5 mod 3 = 2. Zatem do wyniku dopisujemy pasek krótki górny ('A'), wynik = 'ANB', liczba = 5 - 2 / 3 = 1
1 mod 3 = 1. Tak więc do wyniku dopisujemy pasek krótki dolny ('B'), wynik = 'BANB', liczba = 1 - 1 / 3 = 0
liczba wynosi 0, zatem kończymy nasze obliczenia, wynik = 'BANB' co przedstawione w wersji graficznej wygląda następująco:
Implementacje
Autor | Język programowania | Komentarz | Otwórz | Pobierz | Ocena |
Tomasz Lubiński | C# | Microsoft Visual Studio 2010 | .cs | .cs | ***** / 0 |
Tomasz Lubiński | C/C++ | Borland Builder 6 | .cpp | .cpp | ***** / 1 |
Tomasz Lubiński | Delphi/Pascal | Borland Delphi 5 | .pas | .pas | ***** / 2 |
Tomasz Lubiński | Java | .java | .java | ***** / 2 |
Poprawiony: 29 sierpnia 2012 18:44