Чтение datamatrix. Генерируем QR и DataMatrix штрих-коды на Web-страницах средствами JavaScript

Online Data Matrix Generator is developed based on OnBarcode Barcode Generator for .NET .

OnBarcode also provides the following libraries and components for generating, printing, scanning, and reading Data Matrix barcodes.

Barcode Software & Libraries

OnBarcode provides professional barcode software and libraries for you.

  • Generate Barcode Reporting Services - creating barcodes in SSRS reports with data from database.
  • Generate Barcode Java - generating linear, matrix barcodes in Java class, iReport and other applications.
  • Read Barcode Java - reading barcodes in Java applications using Java class library.
  • Read Barcode .NET - scanning, reading barcodes in .NET WinForms, ASP.NET, C# and VB.NET projects.
  • Read Barcode .NET Samples - tutorial for reading barcodes in .NET applications using C# / VB.NET.
  • Generate Barcode .NET - generate, create barcodes in various .NET projects with barcode control library.
  • Generate Barcode .NET Samples - tutorial for creating barcodes in .NET applications with VB.NET & C# sample codes.
  • Generate Barcode ASP.NET - create, generate barcodes in ASP.NET web form/ website, or add barcodes in aspx/html pages.
  • Generate Barcode ASP.NET Samples - barcode tutorial to create barcodes in ASP.NET web applications with examples.
  • Generate Barcode .NET WinForms Samples - tutorial to generate barcodes in .NET C# or VB.NET windows forms.
  • Generate Barcode C# Samples - tutorial to generate barcodes in .NET projects using Visual C# demo codes.
  • Generate Barcode VB.NET Samples - barcode tutorial to create barcodes in .NET using Visual Basic .NET example codings.

QR Code Software & DLLs

OnBarcode provides reliable & mature QR Code software and dlls for you.

  • QR Code in BIRT - creating, printing QR Code 2D barcode images and resize in Eclipse BIRT Report.
  • Read QR Code in .NET - reading, scanning QR Code bar codes in .NET projects using C# / VB.NET sample code.
  • QR Code in .NET - generating, creating QR Code matrix barcode images in .NET programs easily.
  • QR Code in C# - generating, printing QR Code barcodes in Visual C#.NET applications.
  • QR Code in VB.NET - creating, printing QR Code images in Visual Basic with VB.NET sample codes.

Data Matrix является двумерным матричным штрих кодом, состоящим из светлых и темных участков. С помощью такого штрих кода можно закодировать достаточно большой объем информации (2-3Кб). Часто Data Matrix применяется при маркировке небольших предметов, например микросхем, а также в пищевой, оборонной промышленности, рекламе и других сферах.

Существует множество сайтов для создания таких кодов, но мне всегда было интересно, каким же образом текст превращается в набор черных и белых квадратиков? Должен же быть какой-то алгоритм?

При создании Data Matrix нам понадобится обратиться к арифметике полей Галуа и кодам Рида-Соломона. Рассмотрим этот процесс на простом примере.

Прежде всего, посмотрим на структуру матрицы:

Состоит наша матрица из двух частей: шаблона поиска и закодированных данных. Разумеется, размер матрицы прямо пропорционален размеру входных данных. Вокруг нашего кода обязательно должна быть свободная зона, отделяющая код от остального изображения.

Возьмем какое-нибудь короткое слово, например, “Habr” (без кавычек) и создадим для него Data Matrix. Процесс состоит из двух этапов: на этапе высокоуровневого кодирования нужно получить последовательность кодов данных и кодов коррекции ошибок, а на этапе низкоуровневого кодирования – изобразить в матрице двоичное представление этих кодов.

Высокоуровневое кодирование


В Data Matrix, как и в QR-коде, используются коды Рида-Соломона над полем Галуа (число 8 выбрано, поскольку каждое кодовое слово занимает в матрице 8 бит). Существует несколько неприводимых многочленов, позволяющих сгенерировать такое поле. Среди них (в десятичном представлении 285, используется для QR-кодов) и (301, используется в Data Matrix).

Для расчетов нам понадобится таблица степеней двойки для каждого элемента поля. Создается эта таблица довольно просто: если показатель степени , то возведение в степень выполняется как обычно. В противном случае , после чего производится побитовое сложение по модулю 2 с десятичным представлением взятого неприводимого многочлена, если . Например, , и т. д.

Необходимо получить кодовое слово

Где – информационный многочлен, – порождающий многочлен, – общая длина кода вместе с корректировочными, – количество информационных кодов (вместе с кодами отступа, о них – далее), – операция взятия остатка от деления.

Создадим для начала информационный многочлен. Для этого нам понадобится знать, какого размера должна быть матрица, чтобы можно было разместить все информационные коды:


Из таблицы видно, что для кодирования строки из 4х элементов нужно взять матрицу размером 12x12 («полезная» область – 10x10), в которую помещаются 5 кодов данных и 7 кодов коррекции.

Для символов таблицы ASCII код получается следующим образом: C=ASCII value+1. Например, для символа ‘H’ C=72+1=73.

Подряд идущие цифры объединяются в пары, и для них C=N+130, где N – число, полученное в результате группировки. Например, если рядом стоят цифры 2 и 5, то C=25+130=155.

Поскольку элементов у нас меньше, чем должно быть (вместо пяти только четыре), необходимо добавить специальные коды отступа. Первым таким кодом всегда является 129. Последующие коды отступа, до первого кода коррекции ошибок, вычисляются так:

Где
– псевдослучайное число, – номер элемента.

Для слова “Habr” получаем следующую последовательность кодов: 73, 98, 99, 115, 129.

Теперь мы можем записать информационный многочлен:

И домножить его на ( – число кодов коррекции):

Перейдем к созданию порождающего многочлена. Вычисляется он по следующей формуле:

Начинаем перемножать скобки:

Сложение в нашем поле определено как побитовое сложение по модулю 2. Сначала выполняется возведение в степень с помощью таблицы, затем их сложение и нахождение «логарифма» полученного числа для возврата к степеням двойки. В случае если после сложения степеней получается число, большее 254, берем его остаток от деления на .

После перемножения всех скобок и возведения в степень получим:

Последняя операция, завершающая высокоуровневое кодирование, и, пожалуй, самая сложная – нахождение остатка от деления на :

Выполняется деление многочленов в столбик, но с учетом того, что вычитание, определенное точно так же, как и сложение, и умножение выполняются в поле Галуа.

Теперь мы можем записать кодовое слово полностью:

Низкоуровневое кодирование


Каждый из полученных выше кодов представляется в Data Matrix в виде квадрата размером 3х3 ячейки без правого верхнего уголка. 1 здесь соответствует старшему биту, 8 – младшему. Нужно заполнить такими элементами всю матрицу.

Приготовим сетку 10х10 (именно такого размера должна быть матрица в данном случае), на которой нарисуем контуры первых пяти элементов, как на рисунке справа. Вне зависимости от того, какого размера матрица, эти элементы всегда располагаются именно так, и никак иначе.

Остальные элементы размещаются аналогичным образом, но прежде чем нарисовать их, необходимо отметить несколько особых случаев, связанных с углами матрицы.

Если , где a – сторона квадрата, то перед нами самый простой случай, когда после размещения всех элементов непоместившиеся участки просто переносятся на противоположную сторону.

Если , то в правом нижнем углу остается «лишний» квадратик размером 2х2, который заполняется так:

Если или , то следует обратить внимание на левый нижний и правый верхний угол, особенно на нумерацию битов.

Последнее обновление: 12/06/2011

Штрихкод совершенствовался многократно. Основной задачей модификаций является увеличение объёма шифруемой информации с уменьшением площади самого кода. Если полосковый штрихкод использует одномерную систему кодирования, то двухмерный расшифровывается в по горизонтали и по вертикали. Перед обычным штрихкодом, у двухмерного есть пара весомых преимуществ: существенно больший объём хранимой информации и возможность восстановления до 30% повреждённых данных.

Наибольшее распространение в настоящее время получили стандарты DataMatrix, изобретённый в 1989 году, и QR-код («QuickResponse», т.е. «Быстрый отклик»),разработанный в 1994 году Японской компанией Denso Wave Inc. Ключевое отличие QR над Data Matrix - умение работать с кана символами японского языка.
Двухмерный код может быть нанесен различными способами - струйной печатью, гравировкой, лазером, электролитическими способами и т.д. В зависимости от метода нанесения, код может оставаться на элементе на протяжении всего его цикла использования.


QR-код

QR код - это разновидность матричного кода (2D-barcode), созданная Японской корпорацией Denso-Wave в 1994 году. "QR" - это сокращение от"Quick Response", "Быстрый отклик", этим названием создатели хотели показать, что QR-код позволяет быстро доносить свое содержание до пользователя. QR коды очень распространены в Японии, там они являются самым популярным видом 2D-кодов.
Уже в начале 2000 года QR-коды получили широкое распространение в Японии и других азиатских странах. Вы можете найти их на визитках,журналах, газетах, листовках, плакатах, досках объявлений, продуктах питания, сайтах и т. д. В Европе и Америке тоже стараются не отставать.

Несмотря на то, что QR коды изначально использовались для учета деталей в машиностроении, сейчас они используются более широко, как для коммерческих систем учета, так и для быстрой доставки информации пользователям мобильных телефонов. QR коды могут хранить контактную информацию, текст, телефонные номера, адреса e-mail и гипертекстовые ссылки. Пользователи с телефоном, оснащенным камерой и с соответствующим программным обеспечением могут сосканировать QR-код,при этом откроется закодированная в QR гиперссылка, или закодированный контакт добавится в адресную книгу. Удобство использования QR-кода очевидно - вместо запоминания длинной ссылки или адреса e-mail достаточно навести камеру телефона на QR-код, и ссылка будет добавлена в избранное.

Емкость QR-кода

На первый взгляд может показаться, что QR-код не способен хранить много информации, и подходит лишь для кодирования коротких строк, например, URL или e-mail. На самом деле емкость QR-кода не так уж мала:

Как вы можете увидеть, в QR-коде может быть закодировано более 2 Кб текста, что сильно расширяет спектр его применений, особенно учитывая удобство и скорость доставки информации конечному пользователю.

Коррекция ошибок в QR кодах

QR коды используют алгоритм Рида-Соломона(Reed-Solomon) для коррекции ошибок. Это позволяет без проблем считывать коды, которые каким-то образом повреждены - затерты, перечеркнуты, и т.п. QR коды имеют 4 уровня коррекции ошибок, которые отличаются количеством информации для восстановления и соответственно количеством полезной информации,которую можно восстановить при повреждении кода. Уровни коррекции и соответствующие проценты информации, которые возможно восстановить,следующие:

L 7%
M 15%
Q 25%
H 30%

DataMatrix код

Штрихкод DataMatrix, в свою очередь, на 30-60% меньше по площади, чемQR, содержащий идентичные данные.

DataMatrix - типичный представитель семейства 2D-баркодов, позволяющий закодировать до 3Кб информации. DataMatrix, как и все другие подобные баркоды, содержит информацию для восстановления, которая позволяет восстановить закодированную информацию при частичном повреждении кода.

Каждый код DataMatrix содержит две сплошные пересекающиеся линии в виде буквы L, для ориентации считывающего устройства, две другие границы кода состоят из перемежающихся черных и белых точек и служат для указания размеров кода считывающему устройству.

Особенности DataMatrix кода:

  • Стандартизация (принят международный стандарт ISO/IES16022, готовится российский стандарт)
  • Большая информационная емкость (более 2000 букв или 3000цифр)
  • Высокая скорость распознавания и декодирования
  • Низкие требования к качеству поверхности, на которуюнаносится метка
  • Распознавание не зависит от фона изображения
  • У символа допускается две формы - квадрат и прямоугольник,это облегчает вписывание метки в имеющееся на изделии пространство

Наиболее распространенное применение DataMatrix - это маркировка небольших объектов, например микросхем, поскольку DataMatrix позволяет закодировать 50 символов в изображении размером 2-3 мм2, который может быть считан без проблем. В общем-то размер кода ограничен только технологически, как и в случае любого другого 2D кода, но поскольку DataMatrix - это открытый стандартизованный код, многие компании его используют для своих целей. Этим можно объяснить его широкое распространение.

Коды DataMatrix состоят из модулей, состыкованных друг с другом. Всегос использованием DataMatrix можно закодировать до 3116 символов ASCII.Коды должны содержать четное количество модулей по вертикали и горизонтали. Большинство DataMatrix-ов квадратные, но в целом можно использовать и прямоугольные коды. Все коды используют коррекцию ошибок стандарта ECC200, который, в свою очередь, использует алгоритм Рида-Соломона(Reed-Solomon) для кодирования/декодирования данных. Это позволяет восстановить в случае повреждения кода до 30% полезной информации. DataMatrix коды постепенно становятся привычным явлением на конвертах и посылках. Код может быть быстро прочитан сканером, что позволяет отслеживать корреспонденцию довольно эффективно

В промышленности DataMatrix применяют для маркировки различных элементов.

Microsoft Tag

Microsoft Tag представляет собой двухмерный цветной штрихкод (High Capacity Color Barcode). В отличии от QR и DataMatrix-кодов, этот тип гораздо лучше распознается. Даже расфокусированный код (часто камеры мобильных телефонов без автофокуса) можно прочесть.

Microsoft Tag хранит собственный номер длиной 13 байт + 1 контрольный бит. Программа распознавания отправляет этот номер на сервер, которые выдает хранимую в этом коде информацию.

Плюсы Microsoft Tag, по сравнению с QR и DataMatrix-кодами

  • Хранят больше информации на том же физическом размере
  • Информацию содержат только небольшие кружочки в центрах треугольников и концы синхронизационных линий. Поэтому возможны Microsoft Tag и с рисунками.
  • Можно проследить сколько пользователей "прочли" код (благодаря статистике Live)

Минусы Microsoft Tag, по сравнению с QR и DataMatrix-кодами

  • Требуется подключение к интернету (т.к вся информация, зашифрованная в коде, находится на серверах Microsoft Tag)
  • Необходимо цветное печатающее устройство (хотя возможно создать и черно-белый код)

Создание своего кода доступно (необходима учетная запись Windows Live).

Скачать программу-распознаватель для мобильных устройств можно

Создание своего кода

Создать QR-код с любой текстовой информацией можно несколькими способами:

1) Через онлайн-сервисы

Наиболее простой и удобный способ. Просто заходите на специальный сайт, выбираете тип кода (QR или DataMatrix), выбираете,что будет содержать код (просто текст, адрес интернета, адрес e-mail, визитную карточку, размер кода).

Чтение кода

Расшифровать двухмерный код можно:

1) Через мобильный телефон

Для платформы Symbian 9.x (.sis приложения):

NokiaBarCode Reader (Nokia N79, N82, N93, N93i, N95, E66, E71,E90, 6220 Classic, Nokia N78, 6210 Navigator, N96 и другие)

Код стандарта Data Matrix представляет собой двухмерный матричный код, с помощью которого можно кодировать очень большие объемы данных в компактном пространстве. Его используют в различных целях, в том числе в аэрокосмической промышленности, для маркировки компонентов, в оборонной промышленности, для почтовых отправлений и печатных СМИ.

Спецификации: В коде стандарта Data Matrix можно кодировать до 2335 буквенно-цифровых символов либо — до 3116 числовых. Код состоит из нескольких блоков черных и белых клеток, которые представлены в форме либо квадратного, либо прямоугольного образа. Кроме того, каждый код стандарта Data Matrix имеет как код поиска по периметру, так и образ синхронизации. В коде также можно кодировать символы больших и малых размеров. По краям каждого кода стандарта Data Matrix находится белое поле.

Преимущества: Код стандарта Data Matrix можно считывать даже при его частичном повреждении до 40 % благодаря встроенной системе коррекции ошибок. Также возможно кодировать буквы, числовые данные и другие символы ASCII.

Недостатки: Даже при наличии возможности кодировать множество символов, гораздо больше, чем в большинстве одномерных штрихкодах, код стандарта Data Matrix по-прежнему имеет общее ограничение по количеству символов, и поэтому непрактичен для передачи длинных сообщений.

Похожие штрихкоды:
QR-код — также состоит из блоков черных и белых клеток наряду с образами поиска.