PDF417 — это формат многослойного линейного штрихкода, используемый в различных приложениях, таких как транспорт, идентификационные карты и управление запасами. «PDF» означает Portable Data File (переносимый файл данных). «417» означает, что каждый шаблон в коде состоит из 4 полос и пробелов в шаблоне длиной 17 единиц (модулей). Символика PDF417 была изобретена доктором Инджиуном П. Ваном в Symbol Technologies в 1991 году. [1] Она определена в ISO 15438 .
PDF417 используется во многих приложениях как коммерческими, так и государственными организациями. PDF417 — один из форматов (наряду с Data Matrix ), который может использоваться для печати почтовых отправлений, принимаемых почтовой службой США . PDF417 также используется стандартом Bar Coded Boarding Pass ( BCBP ) авиационной отрасли в качестве символики 2D штрихкода для бумажных посадочных талонов. PDF417 — это стандарт, выбранный Министерством внутренней безопасности в качестве технологии машиносчитываемой зоны для водительских прав, совместимых с RealID, и государственных удостоверений личности. Штрихкоды PDF417 также включены в визы и карты пересечения границы, выдаваемые государством Израиль ( пример ).
Помимо функций, типичных для двумерных штрихкодов, возможности PDF417 включают в себя:
Введение к документу ISO/IEC гласит: [2]
Штрих-код PDF417 (также называемый символом ) состоит из 3–90 строк, каждая из которых похожа на небольшой линейный штрих-код. Каждая строка имеет:
Все строки имеют одинаковую ширину; каждая строка имеет одинаковое количество кодовых слов.
PDF417 использует кодировку с основанием 929. Каждое кодовое слово представляет собой число от 0 до 928.
Кодовые слова представлены узорами темных (полоса) и светлых (пробел) областей. Каждый из этих узоров содержит четыре полосы и четыре пробела (отсюда и 4 в названии). Общая ширина в 17 раз больше ширины самой узкой разрешенной вертикальной полосы (измерение X); отсюда и 17 в названии. Каждый узор начинается с полосы и заканчивается пробелом.
Высота строки должна быть как минимум в 3 раза больше минимальной ширины: Y ≥ 3 X. [2] : 5.8.2
Для представления каждого кодового слова используются три различных шаблона штрих-пробел. Эти шаблоны организованы в три группы, известные как кластеры . Кластеры помечены как 0, 3 и 6. Ни один шаблон штрих-пробел не используется более чем в одном кластере. Строки символа циклически проходят через три кластера, поэтому строка 1 использует шаблоны из кластера 0, строка 2 использует кластер 3, строка 3 использует кластер 6, а строка 4 снова использует кластер 0.
Какой кластер можно определить с помощью уравнения: [2] : 5.3.1
Где K — номер кластера, а b i относится к ширине i -й черной полосы в символе (в единицах X ).
Альтернативно, [2] : 76–78
Где E i - это расстояние от i -го края до следующего того же края. Нечетные индексы - это расстояние от переднего края полосы до переднего края следующей полосы; четные индексы - для задних краев.
Одной из целей трех кластеров является определение того, в какой строке (mod 3) находится кодовое слово. Кластеры позволяют считывать части символа с помощью одной строки сканирования, которая может быть наклонена относительно горизонтали. [2] : 5.11.1 Например, сканирование может начинаться в строке 6 в начале строки, но заканчиваться в строке 10. В начале сканирования сканер видит постоянный шаблон начала, а затем он видит символы в кластере 6. Когда наклонное сканирование охватывает строки 6 и 7, сканер видит шум. Когда сканирование происходит в строке 7, сканер видит символы в кластере 0. Следовательно, сканер знает направление перекоса. К тому времени, как сканер достигает правой стороны, он находится в строке 10, поэтому он видит шаблоны кластера 0. Сканер также увидит постоянный шаблон остановки.
Из 929 доступных кодовых слов 900 используются для данных, а 29 — для специальных функций, таких как переключение между основными режимами. Три основных режима кодируют различные типы данных разными способами и могут смешиваться по мере необходимости в одном штрих-коде:
При создании символа PDF417 добавляется от 2 до 512 кодовых слов обнаружения и исправления ошибок. PDF417 использует коррекцию ошибок Рида-Соломона . При сканировании символа максимальное количество исправлений, которые могут быть сделаны, равно количеству добавленных кодовых слов, но стандарт рекомендует удерживать два кодовых слова, чтобы гарантировать надежность исправленной информации.
PDF417 — это сложенный штрихкод, который можно считывать простым линейным сканированием, проводимым по символу. [4] Для этих линейных сканирований нужны левый и правый столбцы с кодовыми словами начала и конца. Кроме того, сканированию необходимо знать, какую строку оно сканирует, поэтому каждая строка символа должна также кодировать свой номер строки. Более того, линейное сканирование считывателя не будет сканировать только строку; обычно оно начинает сканирование одной строки, но затем переходит к соседней и, возможно, продолжает пересекать последующие строки. Чтобы минимизировать эффект этих пересечений, модули PDF417 высокие и узкие — высота обычно в три раза больше ширины. Кроме того, каждое кодовое слово должно указывать, к какой строке оно принадлежит, чтобы можно было обнаружить пересечения, когда они происходят. Кодовые слова также разработаны для дельта-декодирования, поэтому некоторые кодовые слова избыточны. Каждое кодовое слово данных PDF представляет около 10 бит информации (log 2 (900) ≈ 9,8), но напечатанное кодовое слово (символ) имеет ширину 17 модулей. Включая высоту в 3 модуля, кодовое слово PDF417 занимает 51 квадратный модуль для представления 10 бит. Эта область не учитывает другие накладные расходы, такие как начало, конец, строка, формат и информация ECC.
Другие 2D-коды, такие как DataMatrix и QR , декодируются с помощью датчиков изображений вместо нескоординированных линейных сканирований. Эти коды по-прежнему нуждаются в шаблонах распознавания и выравнивания, но они не должны быть такими заметными. 8-битное кодовое слово займет 8 квадратных модулей (без учета распознавания, выравнивания, формата и информации ECC).
На практике символ PDF417 занимает примерно в четыре раза большую площадь, чем DataMatrix или QR-код. [5]