Universal Product Code

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
В штрих-коде UPC-A каждая цифра представляется семибитной последовательностью, закодированной серией чередующихся штрихов и пробелов. Защитные штрихи (для наглядности выделенные зелёным) разделяют две группы по шесть цифр.

UPC или Universal Product Code (универсальный код товара) — американский стандарт штрих-кода, предназначенный для отслеживания товаров в магазинах. UPC был разработан в 1973 году Джорджем Джосефом Лорером (George Joseph Laurer), работавшим инженером в корпорации IBM. В июне 1974 года первый UPC сканер производства корпорации NCR был установлен в супермаркете Марш (Marsh) в городе Трой (Troy) штата Огайо. 26 июня 1974 года кассиром этого супермаркета был просканирован первый товар — блок 10 фруктовых жевательных резинок компании Wrigley.

Стандартизация[править | править вики-текст]

Стандартизацией и регистрацией кодов UPC занимались организации UCC (Uniform Code Council, Inc.) в США и ECCC (Electronic Commerce Council of Canada) в Канаде. В 2005 году эти организации объединились с европейской ассоциацией EAN и образовали глобальную организацию по стандартизации GS1. «Национальная организация GS1 в России» является представителем этой организации в нашей стране.

Разновидности кода:

  • UPC-A (полный) — кодируется 12 цифр.
  • UPC-E (сокращённый) — кодируется 8 цифр.

Код UPC содержит только числа и никаких букв или других символов.

Усовершенствование кода для применения в других странах[править | править вики-текст]

UPC, содержащий 12 цифр, является прародителем европейского усовершенствованного кода EAN-13, кодирующего 13 цифр. Код UPC является частным случаем, подмножеством кода EAN-13. Код UPC преобразуется в код EAN-13 дописыванием нуля перед двенадцатью цифрами кода UPC. То есть, товар, штрих-код которого мы видим на рисунке к этой статье, будет иметь код EAN-13: 0036000291452. Именно по этой причине товары США и Канады в привычной нам европейской кодировке начинаются с нуля.

Очень важно, что сама «штриховка» при таком преобразовании, то есть рисунок EAN-13 для кодов, соответствующих UPC, идентична «штриховке» UPC. Таким образом была обеспечена совместимость американских кодов для чтения в Европе без какой-либо перепечатки этикеток или переупаковки товара.

Более подробная информация о коде EAN-13 и его отличиях от UPC в статье European Article Number.

Общее описание структуры[править | править вики-текст]

Код UPC — простой и практически симметричный линейный штрих-код. Эта простота, симметричность и высокая помехозащищённость обусловлена недостаточно развитой техникой времён создания этих кодов. Код состоит из 2 групп цифр, по 6 цифр в каждой группе — левой и правой. Группы цифр окаймляются так называемыми защитными, или ограждающими, штрих-шаблонами (Guard Patterns). Эти шаблоны содержат штрихи единичной ширины, которые служат для синхронизации сканера штрих-кода. Наличие именно трёх таких полей обусловлено в первую очередь возможным нанесением штрих-кода на закруглённую поверхность. И если сейчас это не является особой проблемой, то во времена создания этого кода сканеру требовалось знать ширину единичного штриха в начале, середине и конце кода. Левые и правые защитные шаблоны состоят из 3 штрихов единичной ширины — двух тёмных и одного светлого между ними. Средний защитный шаблон состоит из 5 штрихов — трёх светлых и двух тёмных. Всё остальное — цифры.

Каждая цифра левой или правой группы кодируется с помощью четырёх штрихов: двух светлых и двух тёмных. Каждый штрих может иметь относительную ширину в одну, две, три или четыре единицы. Общая ширина штрихов для одной цифры всегда составляет семь единиц. Битовая комбинация для каждой цифры разработана таким образом, чтобы цифры, насколько это возможно, отличались друг от друга. Максимальная длина тёмного или светлого участка не может превышать четырёх единиц. Общая ширина всего кода всегда равна 95 единицам. В любом коде 29 светлых и 30 тёмных штрихов. Все эти технические решения очень важны для надёжности и простоты сканирования этого кода.

Первая цифра кода — это так называемый префикс — имеет некоторое логическое значение, но не столь важна с технической точки зрения. Последняя цифра — контрольное число, служит для выявления возможной ошибки при чтении кода сканером или ручного ввода цифр кода с клавиатуры.

Направление чтения комбинации штрихов значения не имеет, код специально разрабатывался так, чтобы он одинаково просто считывался как в прямом, так и обратном направлении (если товар перевёрнут). Также не имеет значения то, какое исполнение имеет весь штрих-код — фотографически позитивное или негативное. То есть штрих-код, нанесённый светлыми полосками по тёмному фону читается так же, как и тёмными полосками по светлому фону. Мало того, цвета штрихов и фона не обязательно должны быть белыми и чёрными, возможны и другие цветовые комбинации.

Кодировка цифр[править | править вики-текст]

Кодировка цифр для правых и левых частей кода
Цифра Левый код Правый код Ширина линий
0 0001101 1110010 3-2-1-1
1 0011001 1100110 2-2-2-1
2 0010011 1101100 2-1-2-2
3 0111101 1000010 1-4-1-1
4 0100011 1011100 1-1-3-2
5 0110001 1001110 1-2-3-1
6 0101111 1010000 1-1-1-4
7 0111011 1000100 1-3-1-2
8 0110111 1001000 1-2-1-3
9 0001011 1110100 3-1-1-2
Кодировка защитных шаблонов
Шаблон Слева По центру Справа
Левый защитный шаблон 101
Средний защитный шаблон 01010
Правый защитный шаблон 101


При проектировании структуры кода, в условиях ещё не слишком развитой электроники, было важным сделать его как можно более простым для считывания сканером и упростить аппаратную часть самого сканера. Одной из сложностей была проблема вероятного считывания кода в обратном направлении, то есть считывания кода на товаре, который кассир поднёс к сканеру «вверх ногами». Поэтому очень важно было, чтобы чередование полос было одинаковым в обоих направлениях — сначала тёмный штрих, потом белый, потом опять тёмный и так далее. Да, и ещё было бы неплохо, чтобы положение защитных шаблонов было всегда на одном и том же месте.

Решение было найдено. Можно обратить внимание, что код выглядит очень симметрично, то есть количество штрихов справа и слева от центра всегда равно, а ширина правой и левой части штрих-кода одинаковы. То есть механизм считывания штрих-кода всегда одинаков, как этот код ни поверни.

Что касается одинаковой последовательности чередования светлых и тёмных штрихов при прямом и обратном чтении, то разработчики добились этого тем, что кодировка правой и левой групп цифр немного отличается — правые символы имеют фотографически негативное начертание относительно левых. То есть шаблоны штрихов для одной и той же цифры идентичны, но позитивны или негативны. Иначе говоря, отличие только в том, что если для левой части кода это светлый штрих, то для правой — тёмный.

Проблема распознавания прямого или обратного считывания точно так же легко разрешается логически. Например, если сканер считывает цифру с толщиной штрихов 3-2-1-1, то он понимает, что это цифра «ноль» и её прямое считывание, а если он считывает штрихи толщиной 1-1-2-3, то он понимает, что это тот же «ноль», но считанный в обратном направлении. Считывая числа, закодированные зеркально относительно обычной кодировки, сканер понимает, что весь штрих-код считывается в обратном направлении, следовательно, и всю полученную последовательность из 12 цифр нужно передать компьютеру в обратном порядке.

Всё это было определённой перестраховкой и по современным меркам излишеством, но и год был 1973.

Расчёт контрольного числа[править | править вики-текст]

В коде UPC-A (GTIN-12) контрольное число (цифра) рассчитывается следующим образом:


  1. Суммируются все цифры на нечётных позициях (первая, третья, пятая, и т. д.) и результат умножается на три.
  2. Суммируются все цифры на чётных позициях (вторая, четвёртая, шестая, и т. д.).
  3. Числа, полученные на предыдущих двух шагах, складываются, и из полученного результата оставляется только последняя цифра.
  4. Эту цифру вычитают из 10.
  5. Конечный результат этих вычислений и есть контрольная цифра (десятке соответствует цифра 0).

Например, контрольное число для приведённого на рисунке штрих-кода UPC-A «03600029145X», где «X» — это искомая контрольная цифра, рассчитывается путём сложения всех нечётных цифр (0+6+0+2+1+5 = 14), умножается на три (14 × 3 = 42), результат суммируется со всеми чётными цифрами (42+3+0+0+9+4 = 58), отбрасывается всё, кроме последней цифры (58 mod 10 = 8), вычитается из 10 (10 − 8 = 2) и ещё раз, если это необходимо, отбрасывается всё, кроме последней цифры (2 mod 10 = 2). Искомое контрольное число — цифра 2.

При считывании кода правильность считывания проверяется похожим способом, но несколько проще:

  1. суммируются все чётные цифры и умножаются на 3.
  2. суммируются все нечётные цифры включая контрольную цифру.
  3. эти суммы складываются и оставляется последняя цифра от результата.

Технически цифры обрабатываются последовательно, за один проход, с умножением каждой цифры на 1 или 3, в зависимости от чётности позиции, добавлением к сумме и взятием остатка по модулю 10 от текущей суммы. Иными словами десятки сразу отбрасываются, что сильно упрощает механизм вычисления.

Если результат равен нулю, то принимается решение, что код считан правильно, если любая другая цифра, то код однозначно считан неверно.

Кодировка товара[править | править вики-текст]

Данный код создавался, в первую очередь, для автоматизации торговли продукцией, произведённой множеством предприятий, поэтому вопрос внутреннего содержания также был важен для стандартизации и регулирования, чтобы разные предприятия не могли присвоить товару одинаковый код. Каждый вновь производимый вид товара должен был иметь свой уникальный код, и это было главной задумкой всей этой системы. То есть, если производитель выпускает, например, джинсы, то джинсы разного цвета, размера, покроя, должны были иметь различные коды. То есть, если это, например, 10 цветов, 50 видов, 20 размеров, то для их кодировки потребуется десять тысяч кодов.

В свою очередь одинаковый товар, но разных предприятий-производителей, тоже должен был иметь различную кодировку. Всё это было важно для автоматизации учёта в торговле, автоматического контроля остатков товара на складе, прилавках магазинов и так далее.

Теоретический максимум этого кода — 100 миллиардов различных видов товара (11 цифр). Казалось бы, огромное число. Но теория не всегда соответствует практике, и нынешняя ситуация такова, что, более чем за 30 лет существования системы, этих кодов оказалось недостаточно. Это связано с несбалансированным, расточительным их расходованием.

Первоначально 11 цифр кода были распределены следующим образом:

  • Префикс — 1 цифра.
  • Код производителя — 5 цифр.
  • Код товара — 5 цифр.

То есть, теоретически система подразумевала до шестисот тысяч предприятий (по сто тысяч на префикс), каждое из которых могло кодировать до ста тысяч наименований выпускаемой им продукции.

Префикс[править | править вики-текст]

Это первая цифра кода. Логически делит коды на виды выпускаемой продукции.

  • 0, 1, 6, 7, 8 — для большей части товаров.
  • 2 — Зарезервировано для внутреннего использования торговыми предприятиями, для весовых товаров. Переменная весовая часть кода UPC для таких товаров, как сыры, колбасы, свежие фрукты и других присваивается в магазине во время их упаковки. При этом левая часть кода — это внутренний код товара в этом магазине, а в правой части кода указывается вес или цена. Магазин сам определяет, как кодировать такой товар.
  • 3 — Медикаменты и прочая продукция фармацевтики, согласно американскому коду National Drug Code (NDC).
  • 4 — Зарезервировано для внутреннего использования торговыми предприятиями для карт покупателя.
  • 5 или 9 — для купонов, но многие торговые предприятия игнорируют это.

Для европейских кодов EAN-13 все эти американские префиксы представляются начинающимися с нуля, то есть 01, 02, 03 и так далее. После объединения с европейской ассоциацией в глобальную GS1 Америке были присвоены дополнительные префиксы 10-13 в европейской кодировке, которые будут использоваться для кодировки обычного товара.

Код предприятия[править | править вики-текст]

Код предприятия — это та часть кода, которая присваивается регулирующей организацией предприятиям, желающим кодировать свой товар. Код предприятия, по-первоначальному замыслу, должен был занимать 5 цифр плюс префиксы, отведённые под кодирование обычного товара. Таким образом, можно было зарегистрировать порядка шестисот тысяч предприятий. Как оказалось, этого мало. Код предприятия располагается в левой части кода UPC.

Код товара[править | править вики-текст]

Код товара занимает 5 первых цифр правой части кода. Каждый вид товара предприятие должно было кодировать своим, уникальным кодом. Код 99999 зарезервирован для кодировки самого предприятия, в целях обеспечения автоматизации документооборота.

Кодировка товара[править | править вики-текст]

Смысловая нагрузка цифр в наименовании товара: Вопреки сложившемуся мнению, цифровой код самого товара (3-5 цифр) никакой смысловой нагрузки не несёт. Ассоциация рекомендует последовательное присвоение кодов по мере выпуска новых видов продукции без вложения в этот код какой либо дополнительной смысловой нагрузки.

Для использования UPС внутри предприятий и торговых организаций выделяются все коды, начинающиеся с цифры 2. Любое предприятие может использовать их как угодно и по своему усмотрению, но исключительно в своих внутренних целях. Использование этих кодов за пределами предприятия запрещено. Внутреннее содержание кодов, начинающихся с 2, может подчиняться любой логике, которое установило то или иное предприятие для себя (обычно это предприятия розничной торговли), и может содержать цену или вес товара, или любые другие параметры, и особенно часто эта кодировка применяется для весового товара.

Миф о закодированных трёх шестёрках

Для синхронизации считывания кода Джордж Лорер предусмотрел 3 специальных защитных, или ограждающих, поля (Guard Patterns) — левое поле (LGP), центральное поле (CGP) и правое поле (RGP). На рисунке эти поля для наглядности выделены зелёным цветом, на самом деле они белые. Левое и правое поля имеют ширину по три единицы, среднее поле имеет ширину 5 единиц (напомним, код любой цифры имеет ширину 7 единиц). Легенда же возникла из-за того, что в одной из кодировок (см. таблицу выше) цифра 6 представлена последовательностью 1010000, что визуально можно воспринять как два штриха. Защитные же поля (101 и 01010) так же выглядят как два штриха, но это не имеет никакого отношения к кодировке цифры 6, кроме визуального сходства. Сам Джордж Лорер признаёт некоторое сходство этих полей с кодированием шестёрки, но считает это случайностью. Также случайностью он считает и тот факт, что его имя, фамилия и отчество (George Joseph Laurer) содержат по шесть букв. Никаких закодированных трёх шестёрок в штрих-коде UPC нет.[1]

См. также[править | править вики-текст]

Примечания[править | править вики-текст]

Ссылки[править | править вики-текст]