Oba standardy służą do tego samego - kodowania dowolnej treści zdefiniowanej przez Ciebie, bez rejestracji w GS1 - ale różnią się na tyle, że wybór ma realne znaczenie dla wielkości etykiety i zgodności ze sprzętem.
Zestaw znaków
Code-39 koduje cyfry, wielkie litery i garść znaków specjalnych (- . $ / + % oraz spację) - małe litery trzeba zamienić na wielkie. Code-128 koduje cały zestaw ASCII, łącznie z małymi literami, więc treść nie wymaga żadnej normalizacji przed zakodowaniem.
Gęstość zapisu
Code-128 koduje dane wydajniej - ten sam tekst wychodzi jako węższy symbol niż w Code-39. Ma to znaczenie na małych etykietach, gdzie liczy się każdy milimetr szerokości.
Suma kontrolna
W Code-128 suma kontrolna jest obowiązkową częścią symbolu - dolicza się automatycznie i nie da się jej pominąć. W Code-39 suma kontrolna jest opcjonalna i w praktyce rzadko stosowana - symbol polega głównie na czytelności samego wzoru kresek.
Kompatybilność ze sprzętem
Code-39 to starszy standard (lata 70.), używany też w normach wojskowych (LOGMARS) - czytają go praktycznie wszystkie skanery, łącznie z bardzo starymi. Code-128 jest nowszy i dominuje w nowoczesnej logistyce (to on stoi za GS1-128), ale sporadycznie można trafić na wyjątkowo stary sprzęt, który go nie obsługuje.
Skąd bierze się różnica w szerokości - konkretne liczby
W Code-39 każdy znak zajmuje stałe 13 modułów (9 elementów, z których 3 są szerokie, plus przerwa między znakami - przy proporcji 2:1). Do tego dochodzą obowiązkowe znaki start i stop (gwiazdka), każdy również po 13 modułów. W Code-128 znak danych ma 11 modułów, a w podzbiorze C jeden znak koduje od razu dwie cyfry. Symbol zamyka suma kontrolna (11 modułów) i znak stopu (13 modułów).
| Treść | Code-39 | Code-128 | Różnica |
|---|---|---|---|
| 1234567890 | 12 znaków × 13 = ok. 155 modułów | start + 5 par cyfr + suma + stop = 90 modułów | Code-128 węższy o ok. 42% |
| MAGAZYN-A12 | 13 znaków × 13 = ok. 168 modułów | start + 11 znaków + suma + stop = 156 modułów | Code-128 węższy o ok. 7% |
| ABCDEFGHIJKLMNOPQRST | 22 znaki × 13 = ok. 285 modułów | start + 20 znaków + suma + stop = 255 modułów | Code-128 węższy o ok. 11% |
Przy module 0,25 mm (typowa drukarka etykiet 203 dpi, 2 kropki na moduł) dziesięć cyfr w Code-39 potrzebuje ok. 39 mm szerokości bez cichych stref, a w Code-128 tylko ok. 22 mm. Dla treści czysto numerycznej przewaga jest więc ogromna; dla tekstu z literami - umiarkowana, ale wciąż po stronie Code-128. Jak to przekłada się na konkretne rolki etykiet, opisujemy w poradniku jak wydrukować kod kreskowy na etykiecie.
Trzy podzbiory Code-128: A, B i C
Code-128 nie ma jednej tablicy znaków, tylko trzy, przełączane w trakcie symbolu:
- Podzbiór A - cyfry, wielkie litery, znaki interpunkcyjne i znaki sterujące ASCII (np. tabulator, koniec linii).
- Podzbiór B - cyfry, wielkie i małe litery, pełna interpunkcja - najczęściej używany do tekstu.
- Podzbiór C - wyłącznie pary cyfr 00-99, po dwie cyfry na znak - najgęstszy zapis dla numerów.
Dobry koder wybiera podzbiory automatycznie i przełącza się między nimi w środku symbolu, żeby zminimalizować jego długość - na przykład „ABC" zakoduje w B, a następujące po nich „123456" w C. Nasz generator Code-128 robi tę optymalizację bez udziału użytkownika, więc nie trzeba niczego ustawiać ręcznie.
Jak działa suma kontrolna w Code-128
Każdy znak Code-128 ma wartość od 0 do 102. Suma kontrolna to wartość znaku startu plus suma iloczynów (wartość znaku × jego pozycja, licząc od 1), wszystko modulo 103. Wynik koduje się jako zwykły znak tuż przed znakiem stopu. Skaner liczy to samo po odczycie i jeśli wynik się nie zgadza, odrzuca skan. To inny mechanizm niż cyfra kontrolna EAN (modulo 10 z wagami 1 i 3), opisana w poradniku jak obliczyć cyfrę kontrolną - i w odróżnieniu od niej nie jest widoczna w tekście pod kodem.
W Code-39 analogiczna, opcjonalna suma to modulo 43 - ale skoro większość czytników ma ją domyślnie wyłączoną, w praktyce odczyt Code-39 chroni tylko redundancja samego wzoru kresek. Dla etykiet magazynowych, gdzie błędny odczyt oznacza wysyłkę złej palety, to istotny argument za Code-128.
Częste pytania
Czy Code-128 zeskanuje telefon?
Tak - każda aplikacja skanująca i większość aparatów systemowych czyta zarówno Code-128, jak i Code-39. Możesz to sprawdzić od razu w naszym skanerze online.
Czy mogę użyć Code-128 na produkcie sprzedawanym w sklepie?
Nie do oznaczania towaru przy kasie - systemy sklepowe oczekują tam EAN-13 z numerem GS1. Code-128 może natomiast pojawić się na tym samym opakowaniu jako dodatkowy kod wewnętrzny albo - w wersji GS1-128 - na opakowaniu zbiorczym.
Co z małymi literami w Code-39?
Istnieje rozszerzenie „Code-39 Full ASCII", w którym małe litery i pozostałe znaki koduje się parami znaków (np. +A oznacza a). Symbol robi się przez to dwa razy dłuższy, a skaner musi mieć włączony odpowiedni tryb. Jeśli potrzebujesz małych liter, Code-128 jest po prostu lepszym narzędziem.
Który kod jest łatwiejszy do wydruku na słabej drukarce?
Code-39 ma tylko dwie szerokości elementów (wąski i szeroki), Code-128 aż cztery. Przy bardzo słabym druku, gdzie kreski rozlewają się nierówno, Code-39 bywa odrobinę bardziej odporny. Na każdej sprawnej drukarce etykiet 203 dpi i lepszej różnica jest nieistotna.
Który wybrać
- Nowy system, dowolna treść (w tym małe litery) - wybierz Code-128. To domyślny wybór dla większości nowych wdrożeń.
- Bardzo stary sprzęt albo wymóg konkretnej normy - Code-39 zapewni najszerszą kompatybilność.
- Logistyka zgodna z GS1 (numer partii, data ważności, SSCC) - użyj GS1-128, który jest zbudowany na Code-128.