Jak generator kodów QR buduje macierz modułów
Format opracowała w 1994 roku japońska firma Denso Wave, do znakowania części w fabrykach Toyoty. Nazwa Quick Response wzięła się z tempa odczytu, bo skaner łapie taki kod pod dowolnym kątem, w ułamku sekundy. W literaturze anglojęzycznej ten sam format występuje jako QR code.
Kod QR to macierz czarnych i białych kwadratów zapisana według normy ISO/IEC 18004. Zadaniem generatora kodów QR jest zamiana treści na ciąg bajtów w kodowaniu UTF-8, a potem na strumień bitów z czterobitowym oznaczeniem trybu i wskaźnikiem długości. Do danych dokładane są słowa korekcyjne wyliczone kodem Reeda-Solomona nad ciałem Galois GF(256) i to one ratują odczyt, gdy kod zostanie zadrapany albo poplamiony.
Gotowy strumień układany jest w macierzy zygzakiem, od prawego dolnego rogu, z pominięciem pól zajętych przez wzory stałe, czyli trzy kwadraty pozycjonujące w narożnikach, wzory wyrównujące, linie czasowe i pola informacji o formacie. Na koniec wybierana jest jedna z ośmiu masek - wzorów, które odwracają kolor części modułów tak, żeby w kodzie nie powstawały duże jednolite plamy ani układy mylące się ze wzorem pozycjonującym. Generator liczy karę dla każdej z ośmiu masek i zostawia tę o najniższym wyniku.
Cały ten rachunek wykonuje się w JavaScripcie, w Twojej przeglądarce. Enkoder napisaliśmy od zera, bez bibliotek zewnętrznych i bez usługi po stronie serwera, więc żeby wygenerować kod QR, wystarczy otwarta strona i chwila pracy procesora.
Kod QR a kod kreskowy
Kod kreskowy EAN-13 zapisuje dane w jednym wymiarze, w szerokości pasków, i mieści trzynaście cyfr. To akurat tyle, żeby wskazać produkt w bazie sklepu. Kod QR czyta się w dwóch wymiarach i przy podobnej powierzchni przenosi kilkaset znaków razem ze słowami korekcyjnymi, więc zmieści adres URL, wizytówkę albo dane logowania do sieci bezprzewodowej.
Stąd wziął się podział ról, w którym kod kreskowy został przy kasie i magazynie, a kod QR trafił na plakaty i faktury, na opakowania i na materiały marketingowe, gdzie liczy się odczyt telefonem bez instalowania czegokolwiek. Ten generator tworzy wyłącznie kody QR; kodów kreskowych EAN tu nie wygenerujesz, bo rządzą się osobną normą i inną regułą sumy kontrolnej.
Dlaczego generowanie kodów odbywa się w przeglądarce
Większość darmowych generatorów kodów QR wysyła treść na swój serwer i odsyła gotowy obrazek. Przy adresie strony firmowej nie ma to znaczenia. Przy haśle do sieci Wi-Fi, numerze telefonu prywatnego albo pełnej wizytówce z adresem domowym już ma, bo dane trafiają do logów obcego serwisu i nie masz wpływu na to, jak długo tam zostaną.
Tutaj cały ciężar generowania kodów bierze na siebie przeglądarka. Kiedy wprowadzasz hasło do firmowej sieci albo prywatny numer, treść zostaje w pamięci karty, w kilkuset liniach JavaScriptu, które policzą słowa korekcyjne i narysują macierz, a po zamknięciu karty znika razem z nią, bo nie wychodzi stąd żadne zapytanie sieciowe.
Osobna kategoria to kody dynamiczne, reklamowane jako „edytowalne”. Taki kod zawiera wyłącznie krótki adres przekierowujący w domenie dostawcy. Gdy dostawca zniknie albo wprowadzi opłatę, wszystkie wydrukowane kody przestaną działać. Statyczne kody z tego generatora zapisują treść w samych modułach, więc wygenerowane kody możesz udostępniać dalej jako zwykły plik graficzny. Statyczny kod obywa się bez pośrednika, który zliczałby skanowania.
Poziom korekcji i rozmiar wydruku
Wersja kodu, od 1 do 40, określa liczbę modułów, od 21×21 do 177×177. Wersja dobierana jest automatycznie, zawsze jako najmniejszy kod, w którym mieści się treść przy wybranym poziomie korekcji. Ta sama treść przy korekcji H zajmie wyraźnie większą wersję niż przy L, bo część miejsca zabierają słowa korekcyjne.
Przy druku pojedynczy moduł musi mieć co najmniej około 0,4 mm boku, a odległość odczytu to mniej więcej dziesięciokrotność boku kodu. Kod wersji 10 (57 modułów) wydrukowany jako kwadrat 2×2 cm ma moduły po 0,35 mm i część telefonów już go nie odczyta. Jeśli kod ma być mały, skracaj treść, zamiast podnosić korekcję. W linku z kampanii zwykle da się wyciąć kilkadziesiąt znaków parametrów śledzenia.
Inaczej wygląda to przy kodzie z logo. Wstawiony w środku obrazek zasłania moduły, które muszą zostać odtworzone z części korekcyjnej, dlatego po wgraniu logo narzędzie samo przechodzi na poziom H i pilnuje, żeby zasłonięte pole nie przekroczyło mniej więcej jednej piątej boku.
Typ kodu i formaty treści, które rozpoznają smartfony
Sam kod QR przenosi zwykły ciąg znaków. To, że telefon proponuje połączenie z siecią albo zapisanie kontaktu, wynika z umownych formatów zapisu, które rozpoznaje system operacyjny. Typ kodu wybierasz zakładką nad formularzem, a generator składa właściwy ciąg za Ciebie. Kody można generować pojedynczo albo hurtem, z listy adresów URL.
- Sieć Wi-Fi zapisuje się jako
WIFI:T:WPA;S:nazwa;P:haslo;;, gdzieTto typ zabezpieczenia,Snazwa sieci, aPhasło. Znaki specjalne muszą być poprzedzone ukośnikiem, inaczej średnik w haśle urwie odczyt w połowie. - Wizytówka idzie jako vCard 3.0, czyli kilkanaście linii z polami nazwiska, firmy, numerów telefonu i adresu pocztowego. Format rozumieją książki adresowe w Androidzie i iOS-ie, w Outlooku i w Gmailu.
- Numer telefonu i adres e-mail korzystają ze schematów
tel:imailto:, tych samych, których używa się w odnośnikach na stronie internetowej. - SMS ma postać
SMSTO:numer:treśći otwiera w telefonie okno nowej wiadomości, a wysyłkę potwierdza użytkownik.
Wszystkie te ciągi zobaczysz w polu „Treść zapisana w kodzie” po prawej stronie. Zajrzyj tam, zanim kod trafi do druku, zwłaszcza przy wizytówce, gdzie łatwo przeoczyć literówkę w adresie.
Najczęstsze przyczyny kodów, których skaner nie odczyta
Z doświadczenia najwięcej problemów sprawiają cztery rzeczy. Po pierwsze zbyt niski kontrast, bo kod w firmowym jasnym beżu na białym tle wygląda dobrze na monitorze i zawodzi na papierze. Po drugie brak marginesu, kiedy kod wklejono wprost na zdjęcie albo wtłoczono w ramkę. Po trzecie za mały wydruk przy zbyt długiej treści. Po czwarte logo powiększone „na oko” tak, że zasłania jedną trzecią kodu.
Każdy z tych błędów wychwycisz w minutę. Zeskanuj podgląd smartfonem, a przy druku poproś o odbitkę próbną i przyłóż do niej skaner kodów albo zwykły aparat, z odległości, z jakiej kod będą czytać odbiorcy. Starsze czytniki kodów bywają mniej czułe niż aparat w nowym telefonie, a warunki skanowania kodów w terenie (słabe światło, mokry papier, kod pod kątem) zabierają część zapasu korekcji.