Kod ma stałe wymiary równe jednemu calowi kwadratowemu. Umożliwia to zakodowanie 93 znaków alfanumerycznych lub 138 cyfr (stała wartość) w 866 modułach. Każdy moduł ma kształt sześciokąta i przyjmuje dwa kolory zaczerniony lub biały. Pojedynczy sześciokąt ma wymiary 1,02mm w pionie i 0,88mm w poziomie. Poszczególne moduły ułożone są w matrycy 30 lub 29 (poziomo) na 33 (pionowo) moduły. Specyfikacja dopuszcza i umożliwia połączenie do ośmiu kodów celem zwiększenia ilości przenoszonych danych.
W centralnej części kodu znajduje się przypominający tarczę strzeleckąwzór wyszukiwania, dzięki któremu skaner może rozpoznać położenie kodu. Wzór wyszukiwania składa się z trzech czarnych okręgów, pomiędzy którymi są białe przerwy. W pewnej odległości od wzoru wyszukiwania znajduje się sześć grup komórek stanowiących wzór orientacyjny. Komórki te są symetrycznie ułożone względem wzoru wyszukiwania i pozwalają na określenie położenia kodu względem skanera (gdzie jest góra, dół, lewa i prawa krawędź).
Mechanizm korekcji błędów
W kodzie stosuje się mechanizm korekcji błędów Reed-Solomon na dwóch poziomach korekcji
SEC – poziom standardowy, w którym dla 42 modułów kodujących dane dodaje się 20 modułów korygujących, co zapewnia możliwość poprawnego odczytu danych dla symbolu uszkodzonego w 16 procentach.
EEC – poziom rozszerzony, w którym na każdy moduł kodujący dane przypada jeden moduł zawierający dane o korekcji, co pozwala na poprawny odczyt symboli uszkodzonych w 25 procentach.
Struktura logiczna
W kodzie grupy modułów tworzą tzw. słowa kodowe. Jedno słowo kodowe odpowiada jednemu znakowi alfanumerycznemu. Dzięki możliwości kompresji cyfr jest możliwość kodowania dziewięciu cyfr w sześciu słowach kodowych. Kodowane dane dzielą się na dwa komunikaty:
komunikat pierwotny – zawiera informacje o trybie kodu, dla niektórych trybów zawiera także pewne informacje o przesyłce, takie jak:
trzycyfrowy kod Class of service przydzielony przez przewoźnika określający priorytet w kolejce
dwudziestocyfrowy kod do śledzenia ruchu przesyłki
dwu- czterocyfrowy kod określający pochodzenie przewoźnika
Komunikat ma długość 60 bitów (modułów). W komunikacie tym wykorzystuje się mechanizm korekcji EEC, co wykorzystuje kolejne 60 bitów.
komunikat wtórny – wykorzystuje poziom korekcji SEC i służy do kodowania innych danych dodatkowych, które nie muszą być niezbędne do odczytania (w przypadku szybkiego skanowania). Dane te mogą zawierać informacje o dozwolonych sposobach manipulacji ładunku, na którym są umieszczone lub jego punkcie nadania i odbioru jak również o numerze faktury, o kliencie, numerze zamówienia etc.
Tryby kodu
Kod może występować w jednym z siedmiu trybów. Informacje o trybie zakodowane są w czterech bitach komunikatu pierwotnego. Tryb uzależniony jest od stosowanego poziomu korekcji, rodzaju przenoszonych danych oraz struktury symbolu. Dostępne tryby to:
Tryb 0 – nieaktualny (można rozpoznać po tym, że dwa górne moduły leżące po prawej stronie są białe, w pozostałych trybach są zaczernione)
Tryb 2 – wykorzystywany przy stosowaniu numerycznych kodów pocztowych
Tryb 3 – wykorzystywany przy stosowaniu alfanumerycznych kodów pocztowych
Tryb 4 – wykorzystywany poziom korekcji SEC
Tryb 5 – wykorzystywany poziom korekcji EEC
Tryb 6 – wykorzystywany dla programowania urządzeń