Вчера мне @oldaviablogger задал вопрос: почему на выложенном мною в видео посадочном замазаны данные снизу, а чёрный прямоугольник справа остался нетронутым?

Ответил, что такое я уже проверял. Такой код сканировал обычным приложением, и на экран вывалилась бессмысленная каша из букв и цифр без единого пробела. Никакой информации, просто технический какой-то набор символов. Отсюда и знал, что замазывать нечего, там всё равно ничего не разобрать и ничего нет.
Ответ оказался неверным.
Стоило перепроверить как следует и та же самая каша развалилась на аккуратные поля с фамилией, кодом брони, номером места и картой лояльности. Строка не изменилась ни на символ. Изменилось только знание о том, по какой схеме её читать.
И талон при этом не чужой а свой же собственный, из своего же видео, где он попадает в кадр крупным планом секунды на две. Дальше, детально углублюсь в то, что там лежит, как эта штука вообще устроена и почему замазывать надо вообще все, а лучше не выкладывать в публичный доступ.
Не QR и никогда им не был
Штрихкод на посадочном талоне выглядит непривычно. Не квадратный обычный привычный нам QR-код, а вытянутый прямоугольник из рваных горизонтальных полос, похожий на плохо принятый факс. Формат называется PDF417, и выбран он для авиации совсем не случайно.
Название расшифровывается как Portable Data File, то есть переносимый файл данных, а число описывает внутреннюю геометрию. Каждый элемент кода состоит из четырёх штрихов и четырёх пробелов, уложенных в шаблон шириной в семнадцать модулей. Отсюда и четвёрка с семнадцаткой. Придумал этот формат Ynjiun P. Wang в компании Symbol Technologies в 1991 году, стандарт открытый и бесплатный, описан в ISO 15438.
Главная хитрость PDF417 в том, что технически это не двумерный код, а сложенный стопкой одномерный. Каждая строка внутри это по сути маленький обычный штрихкод, и весь символ можно прочитать простым лазерным сканером, проведя лучом поперёк. Тем самым, который пищит на кассе в супермаркете. Строк в коде может быть от трёх до девяноста, а данных влезает порядка полутора-двух тысяч символов текста. Целый огромный текст можно разместить.
Второе, ради чего авиация выбрала именно PDF417 это устойчивость к повреждениям. Внутри работает алгоритм Рида-Соломона, тот же, что когда-то держал царапины на компакт-дисках. Код читается, даже когда испорчено до половины символа. Учитывая, что талон живёт свою короткую жизнь, например в заднем кармане джинсов, мокнет под дождём у трапа и мнётся в руках, запас прочности тут хороший.
Что лежит внутри
Строка, которая вылезла из моего талона, выглядит так:
M1REMIZOV/OLEGMR ELR5B76 DXBDMEEK 0133 164Y050A0394 33F>60B1MO6163BEK 2A17695071555910 EK 419334204 25K ^1
Вот она, та самая каша, ради которой когда-то решил, что замазывать нечего. Бессмысленной она кажется ровно до того момента, пока не узнаёшь, что читается всё по жёсткой схеме. Формат называется IATA BCBP, Bar Coded Boarding Pass, и у каждого поля там фиксированная длина. То есть строка — это фактически таблица без разделителей, и достаточно знать, сколько символов отсчитать от начала. Здесь и кроется главная ловушка. Сканер из телефона показывает строку с символами и там случается вот так.
| Что за поле | Значение | Откуда взялось |
|---|---|---|
| Фамилия и имя | REMIZOV/OLEG MR | двадцать символов после служебного начала |
| Код брони | LR5B76 | с помощью которого можно зайти на сайте в бронирование |
| Откуда | DXB | Дубай |
| Куда | DME | Москва, Домодедово |
| Авиакомпания и рейс | EK 133 | Emirates |
| Дата вылета | 164 | сто шестьдесят четвёртый день года, 13 июня |
| Класс | Y | эконом |
| Место | 50A | у окна, как обычно |
| Номер регистрации | 394 | триста девяносто четвёртым прошёл регистрацию |
| Электронный билет | E | признак того, что билет не бумажный |
Отдельного удовольствия заслуживает дата. Вместо привычного формата в талоне стоит юлианский день года, то есть просто порядковый номер суток начиная с первого января. Сто шестьдесят четвёртый день и это у нас тринадцатое июня. Год при этом не хранится вообще, за ненадобностью тк талон живёт меньше суток. В хвосте строки лежит служебная часть авиакомпании. Там дата выписки талона, внутренние ссылки и номер карты Skywards.
Что из этого опасно
Опасен в первую очередь код брони. Связка кода и фамилии — это ровно то, что просит часто форма «управление бронированием» на сайте многих авиакомпаний. Открыв бронь, посторонний человек видит маршрут, контакты, иногда паспортные данные, а главное — может в ней вносить изменения. Поменять место, снять запрос на питание, и даже отменить регистрацию прямо перед вылетом.
Работает эта угроза до тех пор, пока бронь «жива». После того как отлетан последний сегмент маршрута, запись обычно уходит в архив в течение нескольких дней.
Вместо вывода
Проверка с моей стороны конечно же была, вывод только из неё был ошибочный. И в этом весь урок. Не выкладывайте посадочные талоны раньше того момента как завершите свой полет, на всякий случай.
ссылка на рассказ про полет на Emirates.
