Wpisany przez Tomasz Lubiński,
25 lipca 2007 21:49
Pharmacode one-track jest kodem kreskowym wykorzystywanym w przemyśle farmaceutycznym w celu kontroli opakowań. Pharmacode może kodować liczbę z zakresu od 3 (dwa paski) do 131070 (szesnaście pasków) włącznie. Kod zapisywany jest od strony prawej do lewej. Możemy wyróżnić dwie jego formy:
Dopuszcza się możliwość drukowania kodu wdzialnego tylko w świetle UV.
Wartości poszczególnych pasków zestawione są w tabeli poniżej, wartość całego kodu otrzymuje się poprzez zsumowanie wartości pasków składających się na kod:
Jeżeli przez p oznaczymy pozycję to wartość poszczególnych pasków 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 cienki, wartość cienkiego paska na pierwszej pozycji wynosi 1. Dodajemy tą wartość do wyniku, otrzymujemy 1. Kolejny pasek jest gruby, jego wartość odczytana z tabeli wynosi 4 (gruby pasek na drugiej pozycji), dodajemy do wyniku i otrzymujemy 5. Kolejny pasek jest gruby, jego wartość to 8 (gruby pasek na trzeciej pozycji), dodajemy do wyniku otrzymując tym samym 13. Kolejny pasek cienki ma wartość 8 (cienki pasek na czwartej pozycji), dodajemy do wyniku i dostajemy 21. Kolejny, ostatni już pasek jest gruby, jego wartość wynosi 32, dodajemy do dotychczasowego wyniku otrzymując ostateczny rezultat 53.
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 44.
Zajmijmy się teraz zamianą danej wartości na kod Pharmacode one-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:
Spróbujmy wygenerować Pharmacode one-track dla wartości liczba = 25.
Początkowo wynik = ''
25 jest nieparzyste zatem do wyniku dopisujemy pasek cienki ('N'), wynik = 'N', liczba = 25 - 1 / 2 = 12
12 jest parzyste zatem do wyniku dopisujemy pasek szeroki ('W'), wynik = 'WN' (wynik zapisujemy od prawej do lewej), liczba = 12 - 2 / 2 = 5
5 jest nieparzyste zatem do wyniku dopisujemy pasek cienki ('N'), wynik = 'NWN', liczba = 5 - 1 / 2 = 2
2 jest parzyste zatem do wyniku dopisujemy pasek szeroki ('W'), wynik = 'WNWN', liczba = 2 - 2 / 2 = 0
liczba wynosi 0, zatem kończymy nasze obliczenia, wynik = 'WNWN' co przedstawione w wersji graficznej wygląda następująco:
- Standardowy:
- Szerokość wąskiego paska 0.4 - 0.7 mm, standardowo 0.5
- Szerokość szerokiego paska 1.3 - 2.5 mm, standardowo 1.5
- Odstępy między paskami 0.9 - 2.5 mm, standardowo 1.0
- Wysokość paska dowolna, standardowo 8.0 mm
- Miniaturowy:
- Szerokość wąskiego paska 0.3 - 0.45 mm, standardowo 0.35
- Szerokość szerokiego paska 0.9 - 1.7 mm, standardowo 1.0
- Odstępy między paskami 0.55 - 1.65 mm, standardowo 0.65
- Wysokość paska dowolna, standardowo 6.0 mm
Dopuszcza się możliwość drukowania kodu wdzialnego tylko w świetle UV.
Wartości poszczególnych pasków zestawione są w tabeli poniżej, wartość całego kodu otrzymuje się poprzez zsumowanie wartości pasków składających się na kod:
Pozycja | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
Pasek szeroki (Wide) | 65536 | 32768 | 16384 | 8192 | 4096 | 2048 | 1024 | 512 | 256 | 128 | 64 | 32 | 16 | 8 | 4 | 2 |
Pasek wąski (Narrow) | 32768 | 16384 | 8192 | 4096 | 2048 | 1024 | 512 | 256 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
Jeżeli przez p oznaczymy pozycję to wartość poszczególnych pasków możemy zapisać następująco:
- Pasek szeroki = 2p
- Pasek wąski = 2p-1
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 44.
Zajmijmy się teraz zamianą danej wartości na kod Pharmacode one-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 jest parzysta: do wyniku dopisujemy szeroki pasek, liczba = (liczba - 2)/2
- jeżeli liczba jest nieparzysta: do wyniku dopisujemy wąski pasek, liczba = (liczba - 1)/2
Przykład:
Spróbujmy wygenerować Pharmacode one-track dla wartości liczba = 25.
Początkowo wynik = ''
25 jest nieparzyste zatem do wyniku dopisujemy pasek cienki ('N'), wynik = 'N', liczba = 25 - 1 / 2 = 12
12 jest parzyste zatem do wyniku dopisujemy pasek szeroki ('W'), wynik = 'WN' (wynik zapisujemy od prawej do lewej), liczba = 12 - 2 / 2 = 5
5 jest nieparzyste zatem do wyniku dopisujemy pasek cienki ('N'), wynik = 'NWN', liczba = 5 - 1 / 2 = 2
2 jest parzyste zatem do wyniku dopisujemy pasek szeroki ('W'), wynik = 'WNWN', liczba = 2 - 2 / 2 = 0
liczba wynosi 0, zatem kończymy nasze obliczenia, wynik = 'WNWN' 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 | ***** / 3 |
Tomasz Lubiński | Java | .java | .java | ***** / 2 |
Poprawiony: 29 sierpnia 2012 18:43