G-code
- 1 year ago
- 0
- 0
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 | UPC-E |
---|---|
Код UPC содержит только числа и никаких букв или других символов.
UPC, содержащий 12 цифр, является прародителем европейского усовершенствованного кода EAN-13 , кодирующего 13 цифр. Код UPC является частным случаем, подмножеством кода EAN-13. Код UPC преобразуется в код EAN-13 дописыванием нуля перед двенадцатью цифрами кода UPC. То есть, товар, штрихкод которого мы видим на рисунке к этой статье, будет иметь код EAN-13: 0 036000291452. Именно по этой причине коды товаров произведённых в США или Канаде в европейской кодировке начинаются с нуля.
Важно, что сама «штриховка» при таком преобразовании, то есть рисунок EAN-13 для кодов, соответствующих UPC, идентична «штриховке» UPC. Таким образом была обеспечена совместимость американских кодов для чтения в Европе без какой-либо перепечатки этикеток или переупаковки товара.
Более подробная информация о коде EAN-13 и его отличиях от UPC в статье European Article Number .
Код UPC — простой и практически симметричный линейный штрихкод. Простота, симметричность и высокая помехозащищённость обусловлена недостаточно развитой техникой времён создания этих кодов.
Код состоит из 2 групп цифр, по 6 цифр в каждой группе — левой и правой. Группы цифр окаймляются так называемыми защитными, или ограждающими, штрих шаблонами (Guard Patterns). Эти шаблоны содержат штрихи единичной ширины, которые служат для синхронизации сканера штрихкода. Наличие именно трёх таких полей обусловлено в первую очередь возможным нанесением штрихкода на закруглённую поверхность. И если сейчас это не является особой проблемой, то во времена создания этого кода сканеру требовалось знать ширину единичного штриха в начале, середине и конце кода. Левые и правые защитные шаблоны состоят из 3 штрихов единичной ширины — двух тёмных и одного светлого между ними. Средний защитный шаблон состоит из 5 штрихов — трёх светлых и двух тёмных. Всё остальное — цифры.
Каждая цифра левой или правой группы кодируется с помощью четырёх штрихов: двух светлых и двух тёмных. Каждый штрих может иметь относительную ширину в одну, две, три или четыре единицы. Общая ширина штрихов для одной цифры всегда составляет семь единиц. Битовая комбинация для каждой цифры разработана таким образом, чтобы цифры, насколько это возможно, отличались друг от друга. Максимальная длина тёмного или светлого участка не может превышать четырёх единиц. Общая ширина всего кода всегда равна 95 единицам. В любом коде 29 светлых и 30 тёмных штрихов. Все эти технические решения важны для надёжности и простоты сканирования этого кода.
Первая цифра кода — это так называемый префикс — имеет некоторое логическое значение, но не столь важна с технической точки зрения. Последняя цифра — контрольное число, служит для выявления возможной ошибки при чтении кода сканером или ручного ввода цифр кода с клавиатуры.
Направление чтения комбинации штрихов не имеет значения — код разрабатывался так, чтобы он одинаково просто считывался как в прямом, так и обратном направлении (если товар перевёрнут). Также не имеет значения то, какое исполнение имеет весь штрихкод — фотографически позитивное или негативное: штрихкод, нанесённый светлыми полосками по тёмному фону, читается так же, как и тёмными полосками по светлому фону. Цвета штрихов и фона не обязательно должны быть белыми и чёрными, возможны и другие цветовые комбинации.
«Тихая»
зона |
S
(начало) |
L
(левый код) |
M
(середина) |
R
(правый код) |
E
(конец) |
«Тихая»
зона |
||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | |||||
Цифра | Левый код | Обратный код | Правый код | Ширина линий |
---|---|---|---|---|
0 | 0001101 | 0100111 | 1110010 | 3-2-1-1 |
1 | 0011001 | 0110011 | 1100110 | 2-2-2-1 |
2 | 0010011 | 0011011 | 1101100 | 2-1-2-2 |
3 | 0111101 | 0100001 | 1000010 | 1-4-1-1 |
4 | 0100011 | 0011101 | 1011100 | 1-1-3-2 |
5 | 0110001 | 0111001 | 1001110 | 1-2-3-1 |
6 | 0101111 | 0000101 | 1010000 | 1-1-1-4 |
7 | 0111011 | 0010001 | 1000100 | 1-3-1-2 |
8 | 0110111 | 0001001 | 1001000 | 1-2-1-3 |
9 | 0001011 | 0010111 | 1110100 | 3-1-1-2 |
Шаблон | Слева | По центру | Справа |
---|---|---|---|
Левый защитный шаблон | 101 | ||
Средний защитный шаблон | 01010 | ||
Правый защитный шаблон | 101 |
При проектировании структуры кода, в условиях ещё не слишком развитой электроники, было важным сделать его как можно более простым для считывания сканером и упростить аппаратную часть самого сканера. Одной из сложностей была проблема вероятного считывания кода в обратном направлении, то есть считывания кода на товаре, который кассир поднёс к сканеру «вверх ногами». Поэтому очень важно было, чтобы чередование полос было одинаковым в обоих направлениях — сначала тёмный штрих, потом белый, потом опять тёмный и так далее. Да, и ещё было бы неплохо, чтобы положение защитных шаблонов было всегда на одном и том же месте.
Решение было найдено. Можно обратить внимание, что код выглядит очень симметрично, то есть количество штрихов справа и слева от центра всегда равно, а ширина правой и левой части штрихкода одинаковы. То есть механизм считывания штрихкода всегда одинаков, как этот код ни поверни.
Что касается одинаковой последовательности чередования светлых и тёмных штрихов при прямом и обратном чтении, то разработчики добились этого тем, что кодировка правой и левой групп цифр немного отличается — правые символы имеют фотографически негативное начертание относительно левых. То есть шаблоны штрихов для одной и той же цифры идентичны, но позитивны или негативны. Иначе говоря, отличие только в том, что если для левой части кода это светлый штрих, то для правой — тёмный.
Проблема распознавания прямого или обратного считывания точно так же легко разрешается логически. Например, если сканер считывает цифру с толщиной штрихов 3-2-1-1, то он понимает, что это цифра «ноль» и её прямое считывание, а если он считывает штрихи толщиной 1-1-2-3, то он понимает, что это тот же «ноль», но считанный в обратном направлении. Считывая числа, закодированные зеркально относительно обычной кодировки, сканер понимает, что весь штрихкод считывается в обратном направлении, следовательно, и всю полученную последовательность из 12 цифр нужно передать компьютеру в обратном порядке.
Всё это было определённой перестраховкой и по современным меркам излишеством, но и год был 1973.
В коде UPC-A (GTIN-12) контрольное число (цифра) рассчитывается следующим образом:
Например, контрольное число для приведённого на рисунке штрихкода 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, в зависимости от чётности позиции, добавлением к сумме и взятием остатка по модулю 10 от текущей суммы. Иными словами десятки сразу отбрасываются, что сильно упрощает механизм вычисления.
Если результат равен нулю, то принимается решение, что код считан правильно, если любая другая цифра, то код однозначно считан неверно.
Данный код создавался, в первую очередь, для автоматизации торговли продукцией, произведённой множеством предприятий, поэтому вопрос внутреннего содержания также был важен для стандартизации и регулирования, чтобы разные предприятия не могли присвоить товару одинаковый код. Каждый вновь производимый вид товара должен был иметь свой уникальный код, и это было главной задумкой всей этой системы. То есть, если производитель выпускает, например, джинсы, то джинсы разного цвета, размера, покроя, должны были иметь различные коды. То есть, если это, например, 10 цветов, 50 видов, 20 размеров, то для их кодировки потребуется десять тысяч кодов.
В свою очередь одинаковый товар, но разных предприятий-производителей, тоже должен был иметь различную кодировку. Всё это было важно для автоматизации учёта в торговле, автоматического контроля остатков товара на складе, прилавках магазинов и так далее.
Теоретический максимум этого кода — 100 миллиардов различных видов товара (11 цифр). Казалось бы, огромное число. Но теория не всегда соответствует практике, и нынешняя ситуация такова, что, более чем за 30 лет существования системы, этих кодов оказалось недостаточно. Это связано с несбалансированным, расточительным их расходованием.
Первоначально 11 цифр кода были распределены следующим образом:
То есть, теоретически система подразумевала до шестисот тысяч предприятий (по сто тысяч на префикс), каждое из которых могло кодировать до ста тысяч наименований выпускаемой им продукции.
Это первая цифра кода. Логически делит коды на виды выпускаемой продукции.
Для европейских кодов 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 нет.