
PDF417: что это, структура кода и где его применяют
16 мин чтения
PDF417 — это тот вытянутый прямоугольный штрихкод, который вы видели на обороте водительских прав, на визе в паспорте и на бумажном авиапосадочном. Он не похож ни на полосатый EAN, ни на квадратный QR: между ними по устройству. Придуман в 1991 году в компании Symbol Technologies инженером по имени Ван Ицзянь (Ynjiun P. Wang), стандартизирован как ISO/IEC 15438 и до сих пор остаётся рабочим форматом для документов, где нужно упаковать килобайт-полтора данных в машиночитаемую полосу и прочитать их без обращения к базе. Разберём, как PDF417 устроен изнутри — строки кодовых слов, откуда взялось название и цифра 417, какова реальная ёмкость и как работает встроенная коррекция ошибок. И где его применяют сегодня: от прав по стандарту AAMVA до посадочных по BCBP IATA.
Что такое PDF417 и откуда название
PDF417 — двумерный штрихкод стекового типа. Слово «стековый» (stacked) здесь ключевое: код собран из нескольких линейных строк, поставленных одна на другую. Каждая строка — это по сути маленький одномерный штрихкод, а вместе они образуют прямоугольный блок высотой от 3 до 90 строк. Отсюда и характерная вытянутая форма, из-за которой PDF417 путают то с обычным штрихкодом, то с QR.
Разработка велась в Symbol Technologies — американской компании, которая тогда была одним из главных производителей сканеров штрихкодов. Автор формата — инженер Ван Ицзянь, публикация патента и первого описания приходится на 1991 год. Symbol сознательно сделала спецификацию открытой и свободной от лицензионных отчислений: это ускорило принятие кода государственными ведомствами, которым нельзя завязываться на патент одного вендора. В 2006 году спецификацию закрепили как международный стандарт ISO/IEC 15438, действующая редакция — 2015 года.
Название расшифровывается как Portable Data File — «переносимый файл данных». Смысл прямой: код мыслился как способ носить с собой небольшой файл, а не ссылку на запись в удалённой базе. В этом философское отличие от линейных кодов розницы, где штрих — всего лишь указатель на артикул. PDF417 хранит сами данные: имя, дату рождения, номер документа, а иногда фотографию или подпись в сжатом виде.
Цифра 417 — не год и не версия, а описание внутренней структуры. Каждое кодовое слово PDF417 состоит из 4 тёмных штрихов и 4 светлых пробелов, а суммарная ширина одного слова равна 17 модулям (минимальным элементам). Отсюда «4-17»: 4 полосы, 4 пробела, 17 модулей. Это жёсткое правило самопроверки — если сканер насчитал в слове не 17 модулей, значит чтение сбилось.
Структура: строки, столбцы и кодовые слова
Чтобы понять PDF417, удобно смотреть на него как на таблицу. У кода есть строки (rows) и столбцы данных (data columns), а на пересечении стоят кодовые слова.
Кодовое слово (codeword) — базовая единица. Всего в PDF417 определено 929 значений кодовых слов, от 0 до 928. Часть из них кодирует полезные данные, часть служебная: 900 переключает режим на текст, 901 — на байты, 902 — на числа, и так далее. Каждое кодовое слово рисуется тем самым паттерном из 4 полос и 4 пробелов шириной 17 модулей.
Кластеры. Чтобы сканер не путал строки при чтении с наклоном, PDF417 использует три разных набора начертаний для одного и того же значения кодового слова — их называют кластерами 0, 3 и 6. Строки чередуют кластеры по циклу 0-3-6-0-3-6, поэтому по внешнему виду слова сканер понимает, на какой строке он находится, даже если считывающий луч соскользнул на соседнюю. Это делает стековый код устойчивым к перекосу, которого линейные штрихкоды не прощают.
Устройство строки. Каждая строка PDF417 читается слева направо и содержит фиксированную последовательность:
- Start pattern — стартовый шаблон, одинаковый для всех строк, помечает начало кода.
- Левый индикатор строки — служебное кодовое слово, в котором зашиты номер строки, общее число строк, число столбцов и уровень коррекции ошибок.
- Кодовые слова данных — от 1 до 30 столбцов полезной нагрузки.
- Правый индикатор строки — дублирует служебную информацию с другой стороны для надёжности.
- Stop pattern — стоповый шаблон завершает строку, он на один модуль шире стартового.
Максимальная конфигурация — 30 столбцов данных на 90 строк. Перемножив и вычтя служебные слова и коррекцию, получаем предельную полезную ёмкость около 1850 байт, или примерно 1800 знаков текста, либо 2710 цифр. В отличие от QR-кода с его фиксированными версиями, PDF417 гибко подстраивает число строк и столбцов под объём данных и заданную пропорцию, что и даёт разброс форм — от почти квадратного блока до длинной узкой ленты.
Коррекция ошибок Рида — Соломона
Как и другие серьёзные 2D-коды, PDF417 несёт встроенную избыточность на алгоритме Рида — Соломона — том же, что используется в QR-кодах, на компакт-дисках и в спутниковой связи. Часть кодовых слов отводится не под данные, а под контрольные символы, по которым сканер восстанавливает стёртые или неверно прочитанные фрагменты.
В PDF417 предусмотрено девять уровней коррекции — от 0 до 8. Каждый следующий уровень удваивает число контрольных слов: уровень 0 добавляет всего 2 слова, уровень 1 — 4, уровень 2 — 8, и так по геометрической прогрессии до уровня 8, который расходует 512 кодовых слов только на защиту. Чем выше уровень, тем больше повреждений код переживёт, но тем крупнее он получится при той же нагрузке.
Рекомендации стандарта привязывают уровень к объёму данных: для 1–40 слов данных советуют уровень 2, для 41–160 — уровень 3, дальше выше. На водительских удостоверениях, которые трутся в кошельке и выцветают, обычно берут уровень 4–5 — компромисс между устойчивостью и размером. Коррекция Рида — Соломона решает две задачи одновременно: исправляет ошибки (слово прочитано, но неверно) и восполняет стирания (слово вообще не прочиталось, например его закрыла царапина). За счёт этого помятый посадочный талон или потёртые права продолжают сканироваться.
MicroPDF417 и MacroPDF417
У формата есть два важных расширения, которые часто идут с ним в комплекте, но решают противоположные задачи.
MicroPDF417
MicroPDF417 — компактная версия для случаев, когда данных мало, а места ещё меньше. У неё нет длинных индикаторов строк: служебная информация зашита в заранее заданные комбинации (1–4 столбца данных при строго определённом числе строк). Это экономит площадь и делает MicroPDF417 пригодным для маркировки мелких деталей и электронных компонентов, где полноразмерный PDF417 не поместится. Максимальная ёмкость скромная — до 150 байт, около 250 цифр. MicroPDF417 применяют в здравоохранении (стандарт HIBC для медизделий) и в системах, где нужно упаковать серийник и партию в узкую этикетку. Подробнее устройство разобрано в термине MicroPDF417.
MacroPDF417
MacroPDF417 решает обратную проблему — когда данных слишком много для одного кода. Механизм позволяет разбить большой файл на несколько символов PDF417 и связать их в единую последовательность: каждый блок несёт служебное поле с номером сегмента, общим числом сегментов и идентификатором файла. Сканер считывает символы в любом порядке, а затем собирает исходный файл целиком. Так на упаковку или документ помещают набор из нескольких кодов, суммарно хранящих десятки килобайт, — например, полную спецификацию груза или изображение. MacroPDF широко используется в промышленной логистике и в почтовых сортировочных системах.
Где применяют PDF417
Сфера PDF417 — документы и идентификация, где важно прочитать данные автономно, без доступа к сети. Ниже основные области.
Водительские удостоверения (AAMVA)
Самое массовое применение PDF417 — оборот водительских прав и ID-карт в США и Канаде. Ассоциация администраторов транспорта и автотранспортных средств AAMVA утвердила PDF417 как обязательный машиночитаемый носитель на всех правах штатов. В коде по единому формату зашиты имя, адрес, дата рождения, номер документа, срок действия, категория, ограничения. Полицейский или бармен, проверяющий возраст, сканирует код ридером — и данные считываются мгновенно, без обращения к базе DMV. Именно PDF417 стоит за американскими сканерами удостоверений личности.
Загранпаспорта и визы
PDF417 применяют в дорожных документах, где нужно продублировать печатные данные в машиночитаемом виде помимо визуальной зоны MRZ. Американские иммиграционные визы несут PDF417 с данными держателя. Ряд стран печатает стековый код на визовых стикерах и внутренних страницах паспортов для ускоренного контроля на границе.
Авиапосадочные талоны (BCBP IATA)
Стандарт IATA BCBP (Bar Coded Boarding Pass) допускает два двумерных кода — Aztec и PDF417. На бумажных посадочных чаще печатают именно PDF417: в него укладываются имя пассажира, код рейса, дата, номер места, статус, PNR. Когда вы прикладываете талон к сканеру на выходе на посадку, считывается закодированная по BCBP строка. На мобильных посадочных авиакомпании чаще выбирают Aztec, который не требует пустого поля вокруг, но PDF417 остаётся стандартом бумажной регистрации.
Почта и складские этикетки
Почтовые операторы и курьерские службы применяют PDF417 (в том числе в связке MacroPDF) для этикеток отправлений, где нужно нести адрес, вес, класс доставки и служебные коды маршрутизации в одном символе. На складах стековый код печатают на паллетных и приёмочных этикетках, когда объём данных больше, чем вмещает линейный Code 128, но заводить полноценный матричный код смысла нет. В ряде акцизных систем, включая российский ЕГАИС для учёта алкоголя, PDF417 исторически используется на марках.
Нужен машиночитаемый код под свою задачу? Если задача — не документ, а ссылка, платёж, меню или контакт, вам подойдёт не PDF417, а QR-код: он читается любым смартфоном без специального ридера. Соберите QR онлайн, выберите тип данных и скачайте в векторе под печать.
Создать QR-код онлайн
Стековый код против матричного: в чём разница
PDF417 часто ставят в один ряд с QR и Data Matrix, но по устройству он к ним не относится. Разница фундаментальная — в том, как данные размещены в пространстве кода.
Стековый код (PDF417) хранит данные в строках. Сканер читает его во многом как набор линейных штрихкодов: ведёт по строкам, распознаёт кодовые слова, собирает строки в блок. Именно поэтому PDF417 умеет читать не только камера, но и продвинутый лазерный сканер с растровой развёрткой, который «пробегает» лучом по строкам. Это наследие линейной эпохи и одна из причин, почему код прижился там, где парк сканеров старый.
Матричный код (QR-код, Data Matrix) хранит данные в двумерной сетке модулей, где значение имеет положение каждой отдельной ячейки. Такой код невозможно прочитать лучом — нужна камера, которая снимет всё изображение целиком и обработает его. Зато матричная упаковка плотнее: в тот же квадрат влезает больше данных, а код получается компактнее.
Отсюда практические следствия. PDF417 крупнее и вытянутее при равном объёме данных — он ест место в длину. Матричные коды компактнее и лучше подходят для маленьких площадок и высокой плотности. Но PDF417 читается более простым оборудованием и исторически укоренён в государственных документах, где менять инфраструктуру дорого и рискованно. Поэтому права в США до сих пор на PDF417, а «Честный знак» и билеты на транспорт — на матричных Data Matrix и Aztec. Полную карту всех типов кодов и их устройство разбирает статья про виды штрих-кодов.
Печать PDF417: требования и нюансы
Стековый код чувствителен к качеству печати сильнее, чем кажется. Ключевые параметры, которые нужно держать под контролем.
Соотношение высоты строки к ширине модуля. Стандарт задаёт минимальную высоту строки в 3 модуля. Если строки сделать слишком низкими, сканер начнёт путать соседние строки, несмотря на систему кластеров. Типичное безопасное соотношение — высота строки от 3 до 5 ширин модуля.
Тихая зона. PDF417, в отличие от Aztec, требует пустого поля вокруг кода шириной не менее 2 модулей со всех сторон. Без тихой зоны сканер не найдёт границы стартового и стопового шаблонов. Это одна из причин, почему на компактных мобильных билетах предпочитают Aztec.
Разрешение печати. Для термопринтера этикеток берут минимум 203 dpi, для типографской печати документов — 300 dpi и выше. Слишком мелкий модуль на низком разрешении «слипается», и код перестаёт читаться. Перед тиражом код обязательно проверяют ручным сканером или приложением-верификатором на нескольких экземплярах, а не на одном идеальном макете.
Контраст. Классический чёрный код на белом фоне надёжнее всего. Цветная печать и печать на глянце снижают контраст и повышают процент нечитаемых кодов, поэтому для документов её избегают. Термин с полным описанием формата и его параметров — PDF417.
Когда PDF417 не нужен: динамический QR как альтернатива
PDF417 хорош ровно там, где данные должны жить внутри кода и читаться офлайн: удостоверение личности, посадочный, акцизная марка. Но если задача маркетинговая — привести человека на сайт, показать меню, собрать статистику сканирований, — стековый код проигрывает по всем статьям. Его не прочитать обычной камерой смартфона без специального приложения, он громоздкий, и записанные в него данные нельзя поменять после печати.
Для таких сценариев используют динамический QR-код: в код зашивают короткую ссылку-редирект, а её цель меняют когда угодно уже после печати — без перевыпуска самого кода. Плюс собирается аналитика: сколько сканирований, откуда, с каких устройств. Что это такое и чем отличается от статического, подробно разобрано в материале про динамический QR-код. Правило простое: документ и офлайн-идентификация — PDF417 или матричный код; ссылка, кампания, меняющийся контент — динамический QR.
Частые вопросы
Чем PDF417 отличается от QR-кода?
Это коды разного типа. PDF417 — стековый: он собран из нескольких линейных строк, поставленных одна на другую, и каждая строка по сути маленький одномерный штрихкод. QR-код — матричный: данные хранятся в двумерной сетке квадратных модулей, где значение имеет положение каждой ячейки. Из-за этого различия по-разному происходит и чтение. PDF417 умеет прочитать не только камера, но и продвинутый лазерный сканер с растровой развёрткой, который ведёт лучом по строкам — это наследие линейной эпохи. QR читается только камерой, которая снимает всё изображение целиком. По форме PDF417 обычно вытянутый прямоугольник и при равном объёме данных заметно крупнее QR, который упаковывает информацию плотнее в квадрат. Различается и типичное применение: PDF417 укоренился в документах и идентификации — водительские права по стандарту AAMVA, визы, бумажные посадочные талоны, акцизные марки. QR-код стал массовым потребительским кодом — оплата, реклама, меню, ссылки на сайты, билеты. По ёмкости они сопоставимы: PDF417 держит примерно до 1850 байт, QR версии 40 — до 2953 байт. Выбор между ними чаще диктует не объём, а инфраструктура: если данные должны читаться специальным ридером в госсистеме — берут PDF417, если обычным смартфоном покупателя — QR.
Почему PDF417 называется именно так и что значит 417?
Название PDF расшифровывается как Portable Data File — «переносимый файл данных». В нём заложена идея формата: код мыслился не как указатель на запись в удалённой базе, а как способ носить с собой небольшой файл целиком. Линейный штрихкод на упаковке — это ссылка на артикул, по которому касса подтягивает цену и название из своей базы. PDF417 наоборот хранит сами данные: имя владельца, дату рождения, номер документа, срок действия, а иногда сжатую фотографию или подпись. Поэтому его и читают там, где сети может не быть — на границе, на выходе на посадку, при проверке удостоверения на дороге. Число 417 к году или версии отношения не имеет — это описание внутренней геометрии кодового слова. Каждое кодовое слово PDF417 состоит ровно из 4 тёмных штрихов и 4 светлых пробелов, а суммарная ширина одного слова равна 17 модулям — минимальным элементам сетки. Отсюда сочетание «4 и 17»: четыре полосы, четыре пробела, семнадцать модулей на слово. Это ещё и правило самопроверки: если сканер, прочитав слово, насчитал в нём не 17 модулей, значит чтение сбилось и слово надо перечитать или восстановить по коррекции. Формат придумал в 1991 году инженер Ван Ицзянь в компании Symbol Technologies.
Сколько данных вмещает PDF417?
Максимальная конфигурация PDF417 — 30 столбцов данных на 90 строк. За вычетом служебных кодовых слов и слов коррекции ошибок предельная полезная ёмкость составляет около 1850 байт. В пересчёте на конкретные типы данных это примерно 1800 символов текста, до 2710 цифр в числовом режиме или порядка 1100 байт произвольных бинарных данных при плотной упаковке. Реальная доступная ёмкость всегда ниже теоретического максимума, потому что часть кодовых слов уходит на коррекцию ошибок: чем выше выбранный уровень защиты (их в PDF417 девять, от 0 до 8), тем меньше места остаётся под полезную нагрузку. Например, уровень 8 расходует 512 кодовых слов только на избыточность. В отличие от QR-кода с его фиксированными версиями PDF417 гибко подбирает число строк и столбцов под конкретный объём и заданную пропорцию, поэтому один и тот же код может выглядеть то почти квадратным блоком, то длинной узкой лентой. Если данных не хватает в один символ, применяют расширение MacroPDF417: файл разбивается на несколько кодов PDF417, связанных общим идентификатором, и сканер собирает их обратно в единый файл, что суммарно даёт десятки килобайт. А для случаев, когда данных мало, а места ещё меньше, существует компактная разновидность MicroPDF417 с ёмкостью до 150 байт.
Где в реальной жизни встречается PDF417?
Чаще всего PDF417 попадается на документах, удостоверяющих личность. Самое массовое применение — водительские удостоверения и ID-карты в США и Канаде: ассоциация AAMVA утвердила PDF417 как обязательный машиночитаемый код на обороте прав, и в нём по единому формату зашиты имя, адрес, дата рождения, номер и срок действия документа. Полицейский или сотрудник, проверяющий возраст, сканирует код и получает данные мгновенно, без запроса в базу. Второе по узнаваемости место — бумажные авиапосадочные талоны: стандарт IATA BCBP допускает Aztec и PDF417, и на распечатанных посадочных чаще стоит именно PDF417 с именем пассажира, рейсом, местом и статусом. Также стековый код применяют на американских иммиграционных визах и визовых стикерах ряда стран, где нужно продублировать печатные данные машиночитаемо. В логистике и на почте PDF417 (нередко в связке MacroPDF) печатают на этикетках отправлений и складских ярлыках, когда объём данных превышает возможности линейного Code 128. В России PDF417 исторически используется на акцизных марках системы ЕГАИС для учёта алкоголя. Общий признак всех этих сценариев — данные должны читаться автономно, без обращения к сети, поэтому их кладут прямо в код.
Можно ли отсканировать PDF417 обычным смартфоном?
Формально да, но не встроенной камерой «из коробки», как QR-код. Штатное приложение камеры на iPhone и большинстве Android распознаёт QR автоматически, а PDF417 не понимает — для него нужно установить специализированное приложение-сканер штрихкодов, которое поддерживает этот формат. Такие приложения есть и бесплатны, они читают PDF417 с помощью камеры телефона так же, как и другие 2D-коды. Однако массовое потребительское применение PDF417 не рассчитано на смартфоны: код придуман для профессиональных ридеров — стационарных и ручных сканеров на постах контроля, на выходах на посадку, у полиции. Эти устройства читают PDF417 надёжнее и быстрее, а часть из них — продвинутые лазерные сканеры, недоступные камере телефона в принципе. Поэтому если ваша задача в том, чтобы код считывал обычный человек своим телефоном без лишних приложений — на пример, вёл на сайт, показывал меню, открывал платёж — PDF417 неудачный выбор. Для этого предназначен QR-код: он читается штатной камерой любого смартфона за секунду. PDF417 же остаётся кодом для документов и систем, где на приёмной стороне стоит специальное оборудование, а не смартфон случайного пользователя.
Чем стековый штрихкод отличается от матричного?
Разница в том, как данные размещены в пространстве кода, и это определяет всё остальное. Стековый код, к которому относится PDF417, хранит данные в строках: он собран из нескольких линейных штрихкодов, поставленных друг на друга стопкой. Каждая строка читается отдельно слева направо, а специальная система из трёх наборов начертаний (кластеров 0, 3 и 6, чередующихся по строкам) помогает сканеру не сбиться на соседнюю строку при небольшом перекосе. Благодаря строчной природе стековый код умеет читать не только камера, но и лазерный сканер с растровой развёрткой, который «пробегает» лучом по строкам — это прямое наследие одномерных штрихкодов. Матричный код, к которому относятся QR-код и Data Matrix, хранит данные в двумерной сетке из квадратных модулей, где несёт смысл положение каждой отдельной ячейки. Прочитать такой код лучом невозможно — нужна камера, которая захватит всё изображение целиком и обработает его как единое поле. Практические следствия: матричная упаковка плотнее, поэтому при равном объёме данных матричный код заметно компактнее стекового, который вытягивается в длину. Зато стековый читается более простым и старым оборудованием, что важно для государственных систем, где парк сканеров менять дорого. Поэтому документы вроде водительских прав живут на стековом PDF417, а компактная маркировка и потребительские сценарии — на матричных Data Matrix и QR.
Готовы попробовать?
PDF417 — код для документов и офлайн-идентификации. Если ваша задача проще и человечнее — привести клиента на сайт, показать меню, принять оплату или поделиться контактом, — вам нужен QR-код. Он читается любым смартфоном за секунду, а в динамическом варианте цель ссылки можно менять после печати и собирать аналитику сканирований.