Budowa kodu QR

Budowa kodu QR

Data:   Informacje

Jaki kod QR jest każdy widzi, chciało by się powiedzieć. Każdy wydaje się podobny, zbudowany z nieregularnych czarno-białych modułów. Można jednak zawsze wyróżnić na ich obszarze charakterystyczne, często symetryczne elementy. Co oznaczają i do czego służą? Myślę że watro poznać parę technicznych informacji.
Moduł to podstawowy element budowy kodu QR. Jest to kwadrat o identycznych bokach. Niektóre moduły w kodzie są czarne inne białe. To ich specyficzny układ względem siebie pozwala na zapisanie danych i umożliwia ich odczytanie.
 
Kod QR zawsze jest kwadratem zbudowanym z kolumn i wierszy wypełnionych modułami. Liczba kolumn i wierszy nie jest dowolna. Ich ilość definiuje parametr zwany Wersją Kodu. Wersja 1 posiada 21 kolumn i wierszy, wersja 2 posiada 25 kolumn i wierszy, aż do wersji 40, która posiada 177 kolumn i wierszy wypełnionych modułami. Wersja jest tak dobierana przez generatory kodu, aby można było zamieścić w kodzie żądaną ilość danych. Im wyższa jest wersja, tym więcej modułów i tym więcej danych możemy zapisać w kodzie. Ilość danych jaka może być zapisana w kodzie nazywana jest pojemnością kodu.
 
Wielkość modułu jest zmienna. Może on mieć bok jednego milimetra, dwóch czy dziesięciu milimetrów. Co za tym idzie, wielkość całego kodu też jest wówczas  różna. Rozmiar w druku zależy od tego jakim urządzeniem będziemy skanować lub w jakiej odległości kod znajdować się będzie od osoby skanującej.
Kod QR posiada górę i dół. Dla nas jako użytkowników nie jest to zbyt istotne, bo dzięki stosowaniu znaczników pozycjonujących skanery błyskawicznie orientują się co do jego ułożenia. Poniższy schemat zawiera elementy, które składają się na kod QR. Generalnie można rozróżnić miejsca szczegółowe (wzory, znaczniki) pozwalające na rozpoznanie i odczyt danych przez skanery oraz obszar właściwych danych.
 
 

lementy kodu to odpowiednio:
 
1) Wzór wyszukiwania,
2) Znacznik formatu,
3) Znacznik wersji,
4) Wzór synchronizacji,
5) Wzór osiowy. 
 
Pozostała cześć kodu to obszar zapisanych danych. Odczyt ich następuje od prawego dolnego rogu.
 
W trakcie generowania kodu zauważamy przeważnie specyficzny układ modułów zawierający trzy kwadraty z czarną otoczką, z których dwa znajdują się u góry, a trzeci u dołu po lewej stronie. Stanowią one wzór wyszukiwania. To głównie dzięki tym elementom czytnik wie, jaka jest orientacja i ułożenie kodu względem kamery.
 
Jak możemy zauważyć, aby zeskanować kod QR nie musimy trzymać kamery telefonu idealnie prostopadle nad obrazkiem. Skanowanie nawet pod pewnym kątem nie powoduje większych problemów z odczytem zawartości kodu mimo, że kod wydaje się zniekształcony.
 

 
Powodem tego jest specyficzna budowa znaczników wzoru wyszukiwania. Znaczniki te zbudowane są z elementów w unikalnych proporcjach wielkości 1 : 1 : 3 : 1 : 1, jak pokazano poniżej.
 

 
Takie proporcje są wynikiem wielokrotnych badań empirycznych przeprowadzonych w trakcie tworzenia standardu. Umieszczenie trzech wzorów wyszukiwania w takich proporcjach, pozwala na błyskawiczną orientację w położeniu kodu i poprawne dekodowanie danych. Nawet przy sporym zniekształceniu obrazu wynikającym z kąta odczytu.
 
Wzór synchronizacji, to dwie linie, pionowa i pozioma zbudowane z naprzemiennych modułów, jasnych i ciemnych. Wykorzystuje się je do ustalenia współrzędnych wierszy i kolumn.
 
Wzór osiowy, to ciemny moduł otoczony obramowaniem o wielkości jednego modułu. W zależności od wersji kodu, może występować w różnych ilościach. Znacznik ten pomaga w odczycie w przypadku zniekształcenia kodu.
 
Znaczniki wersji i formatu zawierają odpowiednio informacje o tych parametrach. Te parametry są odczytywane w pierwszej kolejności podczas dekodowania kodu. Na podstawie tych informacji skaner wie, z jakim rodzajem kodu ma do czynienia i jak odczytywać zapisane dane.
Jest jeszcze jeden istotny element/ Wokół kodu znajduje się jasny margines o szerokości minimum czterech modułów. Nie można o nim zapomnieć. Jest to obszar który gwarancje poprawność odczytu kodu. Jeżeli margines będzie mniejszy, wówczas skaner będzie odbierać otaczające grafiki jako obszar kodu. Odczyt będzie niemożliwy. Należy o tym koniecznie pamiętać. Szczególnie podczas osadzania kodu na grafice o dużym kontraście.
 
Korekcja błędów.
Pierwotnym przeznaczeniem kodów były zadania związane z logistyką. Czyli zakładano użytkowanie ich w warunkach narażających je na zabrudzenie, zniszczenie czy zmoczenie. Wprowadzono zatem mechanizm, który umożliwia odczyt zapisanych danych nawet w przypadku częściowego uszkodzenia. Zastosowany został algorytm korekcji błędów Reeda–Solomona, który (w sporym  uogólnianiu) zapisuje dane w formie słów kodowych zawierających nadmiarowe informacje. Dlatego im wyższa korekcja błędów tym większa część kodu może być uszkodzona. Z drugiej strony pojemność takiego kodu jest mniejsza. Ten sam mechanizm zabezpiecza dane zapisywane na dyskach, płytach CD czy sygnał telewizji cyfrowej.
Dzięki tej technice zarysowanie kodu, czy nawet jego częściowe naderwanie nie powoduje utraty możliwości jego zeskanowania i poprawnego odczytu.
 
Dostępne są cztery poziomy korekcji błędów:
 
L – umożliwiają odczyt przy uszkodzeniu około 7 procent
powierzchni kodu.
M – umożliwiają odczyt przy uszkodzeniu około 15 procent
powierzchni kodu.
Q – umożliwiają odczyt przy uszkodzeniu około 25 procent
powierzchni kodu.
H – umożliwiają odczyt przy uszkodzeniu około 30 procent
powierzchni kodu.
 
Oczywiście, nie w każdym przypadku gwarantowany jest odczyt danych z kodu nawet przy mniejszych uszkodzeniach, niż zakłada to korekcja błędów. Zwłaszcza, jeżeli uszkodzone zostaną specjalne obszary gdzie zapisywane są parametry kodów. Należy o tym pamiętać.
 
Pojemność kodów
Kody QR występują w dwóch odmianach. Model 1 – tak zwany podstawowy lub oryginalny. Posiada on wersję od numeru 1 do 14 i pozwala na zapis do 1167 znaków numerycznych. Model 2 – będący wersją rozszerzoną Modelu 1, posiada wersję od numeru 1 do 40. Umożliwia zapis dużo większej ilości danych (do 7089 znaków numerycznych). Dziś większość kodów QR opartych jest na Modelu 2 i o nim piszę w kwestii pojemności danych.
Jak już wspomniałem wcześniej, pojemność kodu zależy od jego wersji. Czyli wielkości boku, od 21 do 177 modułów. Piszę tu oczywiście o wielkości wyrażonej właśnie w modułach. Wielkość w druku wyrażona w centymetrach zależy od tego jak rozciągniemy danych obrazek.
 
Zależy też od wybranej korekcji błędów, czyli algorytmu kodowania umożliwiającego odczyt danych przy uszkodzonym fragmencie obrazka. Jednak pojemność zleży także od typu danych, jakie chcemy w kodzie zapisać. Przykładowo, dla kodu w wersji 40 (kwadrat o boku 177x177 modułów) możemy zapisać:
 
Korekcja
Znaki numeryczne
Znaki alfanumeryczne
Kodowanie tekstu Latin-1
Kodowanie tekstu UTF-8
L
7089
4296
2953
984
M
5596
3391
2331
776
Q
3993
2420
1663
554
H
3057
1852
1273
424
 
 
Pojawiło się tutaj pojęcie kodowania tekstu. Kodowanie tekstu to w zasadzie nic innego jak dwustronna zamiana znaków danego alfabetu, na liczby rozumiane przez komputery.
Początkowo, specyfikacja kodów QR zakłada kodowanie tekstów (istotne dla nas) kodowaniem ISO 8859-1 (potocznie nazywanym Latin-1). Jest to kodowanie znaków alfabetu łacińskiego wraz ze znakami używanymi w krajach Europy Zachodniej. Kodowanie to nie pozwalało na zapis typowo polskich znaków, jak ł, ź, ć itd. Na szczęście, obecnie powszechnie używanym kodowaniem jest kodowanie to UTF-8, obsługujące polskie znaki. Takie kodowanie również może być zapisane w kodach QR. Z uwagi na obsługę dużo większej liczby znaków niż w standardzie Latin-1, kodowanie UTF-8 potrzebuje "większych liczb" czyli ilości bitów, do zamiany wszystkich tych znaków na numery rozumiane przez komputer.
 
Dlatego też w kodzie QR możemy zapisać mniejszą ilość znaków w kodowaniu UTF-8.
Większość generatorów kodów QR (w tym nasz generator www.qr-online.pl) generują kody z użyciem kodowania znaków w standardzie UTF-8. W zależności od ilości wprowadzonych danych, dobierają też automatycznie wersję czyli wielkość kodu. Nie musimy tutaj się niczym martwić. Jedynie, co należy wybrać, to poziom korekcji błędów. Generując kod zawierający ten sam tekst, otrzymujemy coraz większy kod wraz ze wzrostem poziomu korekcji. O tym, jaki wybrać poziom korekcji napiszę w rozdziale dotyczącym generowania kodów QR.
 
Reasumując, z technicznego punktu widzenia, jako najważniejsze zalety kodów QR należy wymienić:
 
  • Niezwykła szybkość skanowania poprzez mechanizm określania pozycji kodu niezależnie od jego rotacji i kąta skanowania.
  • Możliwość odczytywania częściowo uszkodzonego kodu
  • Możliwość kodowania znaków alfanumerycznych wraz z polskimi literami diakrytycznymi w kodowaniu UTF-8.

 



Wypróbuj konto przez 30 dni bezpłatnie

Zacznij dziś!

Skorzystanie z wersji testowej nie zobowiązuje do kontynuacji usługi płatnej. W każdym momencie możesz zrezygnować.