СтатьяРеклама

Как проверить GTIN в товарном фиде и не перепутать варианты

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

Иллюстрация сверки товарных кодов: две кружки разных цветов, каталог, лупа и лист проверки. Штриховые метки декоративные.

Перед загрузкой товарного фида проверьте GTIN в два этапа: сначала состав числа и контрольную цифру, затем связь с конкретным вариантом товара по подтверждённому каталогу. Результаты храните отдельно: корректно составленный код может оказаться кодом другого цвета, размера или комплектации.

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

Разделите внутренний ID и товарный код

Внутренний SKU связывает строку с учётной системой магазина. GTIN идентифицирует торговую единицу; его нельзя получать из SKU, номера строки или случайной последовательности цифр. Справка Google по GTIN отдельно требует использовать код правильного варианта и не выдумывать значение при сомнении.

Уникальность внутреннего идентификатора проверяется по отдельному протоколу offer id. В этом разборе внутренний SKU уже определён: по нему сопоставляем экспорт и контрольный каталог, а проверяем переданный товарный код.

Название поля и допустимое форматирование зависят от получателя. В спецификации Google это gtin. Выберите профиль получателя и проверьте его актуальные требования; локальный аудит ниже не подменяет спецификацию рекламной площадки.

Что подтверждает контрольная цифра

Для рассматриваемой проверки берём строки из 8, 12, 13 или 14 цифр ASCII. Пустое поле получает отдельный статус: оно не доказывает, что у товара вообще нет назначенного кода. Пробелы и другие символы наш строгий входной контроль отправляет на разбор, хотя отдельный получатель может допускать своё форматирование.

GS1 Romania описывает расчёт: без последней цифры идём справа налево, умножаем разряды попеременно на 3 и 1, начиная с 3, и складываем результаты. Контрольная цифра дополняет сумму до ближайшего числа, кратного десяти; если сумма уже кратна десяти, это 0.

Для последовательности 4006381333931 взвешенная сумма первых двенадцати цифр равна 89: до 90 не хватает 1. Последний разряд совпал. Такая арифметика помогает обнаруживать ошибки переноса, но не проверяет назначение номера товару и не гарантирует обнаружение любой возможной ошибки.

Учебная сверка шести строк

Мы подготовили feed.csv, контрольный master.csv и выполнили локальный скрипт audit_gtin.py. Все связи SKU → код в этих файлах вымышлены; цифровые последовательности служат тестовыми данными и не подтверждены как коды этих товаров в GS1. В рабочий фид их копировать нельзя.

SKUКод в экспортеФормальная проверкаСверка с учебным каталогом
A-GREEN4006381333931ПройденаСовпадает
B-RED4006381333931ПройденаНе совпадает
C-TYPO4006381333932Неверная контрольная цифраНе выполнена
D-SHORT40063813339Неверная длинаНе выполнена
E-EMPTYпустоНет значенияНе выполнена
F-ZERO0012345678905ПройденаСовпадает

У B-RED арифметика проходит, но контрольный каталог ожидает 4006381333948. Значение попало от другого учебного варианта. Если проверять только последнюю цифру, это расхождение останется незамеченным.

Среди шести учебных строк три прошли формальный контроль: две совпали с каталогом, одна не совпала; ещё три требуют разбора входных данных.

Учебный результат двух независимых этапов; «совпало» означает совпадение с master.csv, без проверки реестра GS1.

У F-ZERO начальные нули сохранены как часть строки. Скрипт не приводит код к числу и не дописывает разряды. Если значение уже изменил табличный редактор, вернитесь к исходной выгрузке по инструкции сохранения артикулов и ID.

Ниже приведены оба учебных CSV и полный исходный код audit_gtin.py; результат проверки показан в таблице выше. Сохраните три блока как файлы с указанными именами в одной папке и выполните python3 audit_gtin.py. Сторонние библиотеки не нужны.

Содержимое feed.csv:

sku,gtin
A-GREEN,4006381333931
B-RED,4006381333931
C-TYPO,4006381333932
D-SHORT,40063813339
E-EMPTY,
F-ZERO,0012345678905

Содержимое master.csv:

sku,expected_gtin
A-GREEN,4006381333931
B-RED,4006381333948
C-TYPO,4006381333931
D-SHORT,4006381333931
E-EMPTY,4006381333931
F-ZERO,0012345678905

Полный исходный код audit_gtin.py:

from pathlib import Path
import csv,json,re
p=Path(__file__).resolve().parent
def digit(body):return str((-sum(int(x)*(3 if i%2==0 else 1) for i,x in enumerate(reversed(body))))%10)
def format_status(s):
 if s=='':return 'MISSING'
 if not re.fullmatch('[0-9]+',s):return 'NON_ASCII_DIGITS'
 if len(s) not in (8,12,13,14):return 'BAD_LENGTH'
 if digit(s[:-1])!=s[-1]:return 'BAD_CHECK_DIGIT'
 return 'CHECKSUM_OK'
def audit(feed,master):
 if len({r['sku'] for r in master})!=len(master):raise ValueError('duplicate master sku')
 if len({r['sku'] for r in feed})!=len(feed):raise ValueError('duplicate feed sku')
 m={r['sku']:r['expected_gtin'] for r in master};out=[]
 for r in feed:
  s=r['gtin'];f=format_status(s);e=m.get(r['sku']); match='NOT_CHECKED' if f!='CHECKSUM_OK' else ('NO_REFERENCE' if not e else ('MATCH' if s==e else 'MISMATCH'))
  out.append(dict(r,format_status=f,expected_gtin=e or '',catalog_match=match))
 return out
if __name__=='__main__':
 with (p/'feed.csv').open(newline='') as f:feed=list(csv.DictReader(f))
 with (p/'master.csv').open(newline='') as f:master=list(csv.DictReader(f))
 rows=audit(feed,master)
 with (p/'result.csv').open('w',newline='') as f:
  w=csv.DictWriter(f,fieldnames=rows[0]);w.writeheader();w.writerows(rows)
 result={'synthetic':True,'rows':rows,'note':'Контрольные последовательности не подтверждены как назначенные реальным товарам GTIN. Master — учебное условие, не реестр GS1. Проверка ASCII/длины/контрольной цифры не проверяет допустимые префиксы, регистрацию, упаковку и правила получателя.'}
 (p/'result.json').write_text(json.dumps(result,ensure_ascii=False,indent=2));print(json.dumps(result,ensure_ascii=False))

Скрипт читает файлы рядом с собой, сохраняет result.csv и прекращает работу при повторяющихся SKU в любом входе. Сопоставление идёт по точному SKU, а не по названию, порядку строк или приблизительному сходству товара.

Как получить подтверждённый контрольный каталог

Сначала сверьте значение с маркировкой именно продаваемой единицы и данными производителя или поставщика. Сохраните источник, дату получения и характеристики: модель, цвет, размер, объём, число единиц в упаковке. Если система хранит коробку и отдельный товар, проверьте, какую из этих единиц продаёт карточка.

Реестровая проверка — отдельное действие. GS1 US описывает поиск данных о номере, компании и продукте; полнота результата зависит от данных владельца бренда. Совпадение только компании ещё не подтверждает конкретный вариант. Отсутствие подробной карточки сохраняйте как «не подтверждено» и запрос поставщику, а не как готовый вывод о подлинности товара.

В этом примере реестр не запрашивали. Доступность его функций из Беларуси, условия массовой проверки и тарифы не тестировали; локальная сверка CSV не требует регистрации или покупки сервиса. Доступ к справке Google также не означает доступность размещения рекламы для любого региона.

Как принять исправление

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

Пустое значение отправьте на выяснение причины. Если назначенный код известен, верните его из подтверждённого источника; если неизвестен, не придумывайте и не объявляйте отсутствие идентификатора только ради прохождения проверки.

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

Источники

Материал подготовлен редакцией WiseLab с помощью AI. Источники и фактические утверждения проверены при подготовке.

Загружаем рейтинг…

Насколько полезен материал?

Выберите оценкуСлева — меньше пользы, справа — больше

Загружаем вашу оценку…

Что думаете?

Загружаем комментарии…

СЛЕДУЮЩИЙ ШАГ

Что ещё поможет в этой задаче