Бесплатный проезд в электричках

Xakep, номер #048, стр. 048-058-4


"О поле D замолвите слово..."

В этом абзаце мы расскажем о типах билетов и направлениях. Четыре типа билетов имеют два направления, и еще два типа не имеют направлений. Первые четыре - это "ПОЛНЫЙ", "ДЕТСКИЙ", "ЛЬГОТНЫЙ" и "БЕСПЛАТНЫЙ". Каждый из них может быть как "ТУДА" (->), так и "ТУДА И ОБРАТНО" (<->). Остались типы, которые идентифицируют себя просто цифрой "9" и словом "абонемент" :).

Кочерыжка цветной капусты

Что же такое константы? Так как 3 константы в течение дня не изменяются, мы предположили, что это дата или функция от даты. Логично? Семантика четвертой константы остается вообще загадкой. На билетах она принимает за день всего два значения - "i" и "i + 1". Поэтому-то мы и зачислили по ошибке ее в ряды констант. Но на самом деле она может быть равна чему угодно, и валидность билета от этого не теряется.

А теперь поговорим о том, что нам еще предстоит открыть. Поля не хранятся в штрих-коде в явном виде. К каждому полю в маске прибавляется по модулю 10 определенное число, которое мы назвали смещением. Именно сумма реального значения поля и смещения записывается в штрих-код. Слава Богу, что смещения не меняются в течение дня. Таким образом, 16 смещений в маске можно представить как 16 функций от даты. Осталось их найти. Может, они периодичны? А, может, просто удастся их экстраполировать? В любом случае, имея билет на какое-то число, зная его реальные характеристики, маску и значения в штрих-коде, можно без труда, с помощью операции вычитания узнать все 16 смещений на сегодня. А потом, зная эти 16 чисел, изготовить билет с любыми характеристиками, но опять же только на сегодня.

Автономный Турникет

Как при этом турникет узнает, билет какого числа ему подсунули? Нам кажется, все происходит так.

Билет попадает в турникет. Турникет предполагает, что билет сегодняшний. Смотрит в то место, где сегодня должны лежать 3 константы (дата), вычитает смещение. И если полученное значение не совпало с сегодняшней датой, значит его предположение неверно, и билет не сегодняшний. Далее он предполагает, что он вчерашний и т.д., пока не наткнется на совпадение.

Загадкой всей системы осталась функция смещения от даты. Но мы думаем, что это всего лишь вопрос времени. Так что дерзайте, "лед тронулся, господа присяжные заседатели..."

Особую благодарность выражаем Анатолию Абрамовичу Шалыто, который вдохновил нас на написание статей своими зажигательными лекциями о "Switch-технологии".

Ссылки:

1. http://tickers.da.ru (сайт, посвященный данной тематике)

Назад на стр. 048-058-3  Содержание  Вперед на стр. 048-058-5