Wbrew pozorom, zapowiadane od wielu lat zastąpienie kodów kreskowych przez znaczniki RFID wcale nie następuje. Wręcz przeciwnie – wykorzystanie kodów graficznych zdecydowanie wzrosło, a identyfikatory radiowe użytkowane są na razie przede wszystkim w tych zastosowaniach, w których kody kreskowe by się zwyczajnie nie sprawdzały. Rozbudowanie urządzenia elektronicznego o sensor obrazu wraz z obiektywem i ewentualnym oświetleniem jest obecnie łatwe i niedrogie, a do tego wydruk kodu kreskowego czy dwuwymiarowego jest wielokrotnie tańszy, niż stworzenie i zaprogramowanie znacznika RFID, co doprowadziło do popularyzacji kodów graficznych.
Rodzaje kodów graficznych
Kody kreskowe kojarzą się przede wszystkim z nadrukami na produktach kupowanych w sklepach, które zrewolucjonizowały handel detaliczny. Drugą z popularnych odmian są kody graficzne dwuwymiarowe, które często używane są do przekazywania linków internetowych do urządzeń mobilnych. I choć te pierwsze wydają się ograniczone, a te drugie – skomplikowane w odczycie, w rzeczywistości rodzajów stosowanych kodów graficznych, a nawet tych naprawdę popularnych, jest znacznie więcej. Co więcej, dzięki gotowym narzędziom, zarówno sprzętowym, jak i programowym, korzystanie z kodów graficznych można dosyć łatwo zaimplementować we własnych projektach.
Z wyglądu kody kreskowe, czy też paskowe (barcode) różnią się od kodów 2D (matrycowych) tym, że zawierają jedynie paski ułożone w linii obok siebie – w praktyce, w zdecydowanej większości są po prostu jednowymiarowe, a ich wysokość nie ma znaczenia, o ile tylko jest na tyle duża, by mogły zostać odczytane przez skaner. Klasyczne skanery odczytują te kody przejeżdżając po nich wiązką światła laserowego. Kody 2D złożone są natomiast z punktów (najczęściej prostokątnych), ułożonych w dwuwymiarowej przestrzeni, tworząc tym samym obrazek – swoistą, monochromatyczną, choć niekoniecznie, mozaikę, której najmniejsze elementy muszą być odpowiednio duże, by skaner mógł je odczytać. W efekcie kody 2D niemal zawsze pozwalają na uzyskanie większego upakowania informacji. Naturalnie sprawia to, że układ optyczny i algorytm potrzebny do odczytu kodu dwuwymiarowego muszą być bardziej zaawansowane niż w przypadku kodów paskowych.
Dane zapisywane w kodach graficznych zazwyczaj mają postać tzw. słów. Słowa są albo grupami bitów albo konkretnymi wzorami, przy czym położenie słowa w kodzie może zmieniać graficzny wygląd takiego słowa. Używanie pojedynczych bitów, niegromadzonych w słowa jest bardzo rzadko stosowane, gdyż sensowna korekcja błędów jest możliwa dopiero wtedy, jeśli bity się ze sobą pogrupuje, bądź z góry ustali dopuszczalne kombinacje wzorów ułożenia grup bitów. Ponieważ jakość wydrukowanych kodów może być różna, a dokładność skanera ograniczona, stosowanie korekcji błędów jest w większości przypadków koniecznością. Ma to znaczenie szczególnie w przypadku kodów dwuwymiarowych, w których nawet mały pyłek może przysłonić bit reprezentowany przez pojedynczy moduł. W tych przypadkach, podczas tworzenia kodu określa się zazwyczaj albo stopień korekcji, albo odsetek słów kodowych, które mają zostać poświęcone na bity korekcji.
Ilość informacji, jaką można zapisać w kodzie zależy przede wszystkim od wybranego formatu. Kody dwuwymiarowe mają większą pojemność niż jednowymiarowe, przy czym długość jednowymiarowych nie zawsze jest z góry określona i w praktyce jest ograniczona zdolnościami odczytu skanera. W wielu przypadkach, a szczególnie w kodach 2D możliwe jest łączenie ze sobą kilku czy nawet kilkudziesięciu kodów, co pozwala zwiększyć dopuszczalną ilość przechowywanych informacji.
Ilość treści, którą można zapisać w kodzie praktycznie zawsze zależy także od rodzaju tej treści. Wynika to z faktu, że większość uniwersalnych kodów może być używana w różnych trybach. Najczęściej spotykane to tryb cyfr, alfanumeryczny i binarny. Naturalnie, do zapisu cyfr dziesiętnych potrzeba znacznie mniej bitów, niż do znaków kompletnego alfabetu, dlatego wybór trybu zapisu cyfr zazwyczaj powoduje grupowanie ze sobą kolejnych znaków, tak by np. na każdych 10 bitach zapisywać trzy cyfry, czy np. by na 6 słowach kodowych mieścić 9 cyfr. Konkretne wartości zależą od wybranego formatu kodu i wynikają z konieczności stosowania korekcji błędów oraz z używania dodatkowych znaków funkcyjnych, umożliwiających przełączanie trybu kodu w jego środku. Mechanizm ten prowadzi do możliwości zapisu długich ciągów cyfr w trybie cyfrowym, a długich ciągów liter w trybie alfanumerycznym w ramach jednego kodu, ograniczając jego całkowite rozmiary.