Как полоски штрихкода рассказывают кассе про товар
Кассир проводит пачку молока над стеклом, раздаётся «бип» — и на экране её название и цена. Откуда касса это узнала из набора чёрных полосок? Разберём по слоям: что зашито в линиях, как луч их читает и почему в номере нет ни названия, ни цены.
В полосках штрихкода нет ни названия, ни цены — там всего лишь число, по которому касса лезет в свою базу.
Штрихкод кодирует длинный номер чередованием полос разной ширины; этот номер — лишь ключ, а всё остальное про товар хранится в компьютере магазина.
Что вообще нарисовано на упаковке
Самый распространённый формат на товарах — EAN-13, тринадцать цифр. Цифры вы видите снизу, а сверху над ними — те же цифры, но «нарисованные» полосками, чтобы их мог прочитать луч сканера. Человек читает цифры, машина — полосы; это одно и то же число в двух видах.
Полосы бывают разной толщины. Кодируют информацию не сами чёрные линии, а чередование: ширина каждой чёрной и белой полосы. Каждая цифра занимает участок, разбитый на семь тонких долей-модулей, и в этих семи долях по-разному раскрашены чёрные и белые промежутки.
Как из полос получаются цифры
Каждая цифра представлена двумя чёрными и двумя белыми полосами в пределах своих семи модулей. Например, разной комбинацией получается «двойка», «пятёрка» и так далее. Важная тонкость: левая и правая половины кода используют разные наборы шаблонов.
В правой половине все цифры начинаются с белого и кончаются чёрным, а в левой — наоборот. Благодаря этой зеркальности сканер понимает, с какого конца он читает код, даже если товар повернули вверх ногами. Прочитал «не тот» набор шаблонов — значит, читаешь задом наперёд, переверни результат.
Стартовые и центральные метки
По краям и в середине стоят особые тонкие метки-разделители из чередующихся узких полос (по схеме «чёрная-белая-чёрная»). Они служат опорой: по ним сканер калибрует ширину одного модуля под конкретный размер кода на упаковке и понимает, где начинается, где середина, где конец. Поэтому большой код на коробке и крошечный на жвачке читаются одинаково — масштаб задаётся метками.
Как луч это видит
В кассовом сканере крутится зеркало, разбрасывающее лазерный луч веером линий. Луч скользит по упаковке, чёрные полосы поглощают свет, белые — отражают. Фотодатчик ловит отражение и превращает его в электрический сигнал: то ярко, то темно, то ярко.
Получается «волна» из длинных и коротких интервалов света и тьмы. Электроника измеряет длительности этих интервалов и переводит их обратно в семимодульные шаблоны, а шаблоны — в цифры. Веер из множества линий нужен, чтобы хоть одна из них прошла через весь код целиком, как бы вы ни держали товар.
свет -> полосы -> сигнал ▁▔▁▁▔ -> шаблоны -> цифры -> номерПоследняя цифра — сторож
Тринадцатая цифра не случайна, это контрольная сумма. Её вычисляют из первых двенадцати по простому правилу: цифры на нечётных позициях складывают как есть, на чётных — умножают на три, всё суммируют и берут столько, сколько не хватает до круглого десятка.
Если сканер прочитал код с ошибкой — скажем, царапина превратила одну цифру в другую, — контрольная сумма не сойдётся, и касса просто не пикнет, попросит провести снова. Это дешёвая, но надёжная защита от ложных срабатываний: лучше промолчать, чем пробить не тот товар.
Почему цены нет в коде
Самое неожиданное: в штрихкоде нет ни цены, ни названия, ни срока годности. Там только номер. Первые цифры — это префикс страны-регистратора и код производителя, дальше — код конкретного товара, выданного этим производителем.
Когда касса прочитала число, она отправляет запрос в базу данных магазина: «что за товар с таким номером?» — и уже оттуда получает название, цену, ставку налога и остаток на складе. Поэтому магазин может менять цену хоть каждый час, не переклеивая этикетки: код-ключ остаётся прежним, меняется только запись в базе.
| В штрихкоде | В базе магазина |
| Номер товара | Название |
| Код производителя | Цена, скидки |
| Контрольная цифра | Остаток, налог |
Итог
Штрихкод — это компактный способ записать одно число так, чтобы дешёвый лазер прочитал его за миллисекунды под любым углом. Зеркальные шаблоны дают независимость от поворота, метки-разделители — от масштаба, контрольная цифра ловит ошибки. А смысл числу придаёт уже база данных. Простая идея 1970-х годов, родившаяся ради ускорения очередей в супермаркетах, до сих пор движет мировой торговлей.