13
Стать партнером
13
{{ formatMonthYear(startMonth) }}
{{ d }}
{{ day.day }}
{{ formatMonthYear(endMonth) }}
{{ d }}
{{ day.day }}
Обновлено
20.03.2026
Содержание статьи

DataMatrix

DataMatrix (DM) — обязательный код маркировки для товаров, подлежащих прослеживаемости в системе "Честный знак". Эта страница описывает внутреннюю структуру кода, правила валидации и нормализации DataMatrix до UIT.

О передаче кодов через API: CIS-коды. Общая информация о маркировке: Обзор маркировки.

Формат DataMatrix

Полный DataMatrix состоит из блоков, разделённых GS-символами (\u001d). Каждый блок начинается с AI-идентификатора (Application Identifier):

AI Название Длина данных Описание Входит в UIT?
01 GTIN 14 цифр (фиксированная) Глобальный идентификатор товара Да
21 Serial Number 13 символов Уникальный серийный номер единицы товара Да
240 ТН ВЭД 4 цифры Код товарной номенклатуры (опционально) Да (если есть)
91 Validation переменная Валидационная часть криптохвоста Нет
92 Crypto переменная Криптоподпись Нет

UIT = AI 01 + GTIN + AI 21 + Serial + [AI 240 + ТН ВЭД]. Длина: 31 символ (без ТН ВЭД) или 38 символов (с ТН ВЭД). Lamoda хранит только UIT.

Примеры

Полный DataMatrix (с ТН ВЭД):

010467003301005321gJk6o54AQBJfX\u001d2406401\u001d91ffd0\u001d92LGYcm3FRQrRdNOO+8t0pz78QTyxxBmYKhLXaAS03jKV7oy+DWGy1SeU+BZ8o7B8+hs9LvPdNA7B6NPGjrCm34A==

UIT (с ТН ВЭД) — 38 символов:

010467003301005321gJk6o54AQBJfX2406401

Полный DataMatrix (без ТН ВЭД):

010467003301005321gJk6o54AQBJfX\u001d91ffd0\u001d92LGYcm3FRQrRdNOO+8t0pz78QTyxxBmYKhLXaAS03jKV7oy+DWGy1SeU+BZ8o7B8+hs9LvPdNA7B6NPGjrCm34A==

UIT (без ТН ВЭД) — 31 символ:

010467003301005321gJk6o54AQBJfX

Скрытые символы (GS)

В DataMatrix присутствуют управляющие символы-разделители:

Символ Unicode JSON-представление Описание
GS U+001D \u001d Group Separator — разделитель блоков данных
FNC1 Не передаётся Функциональный символ (только для сканера)

⚠ Частая ошибка: При копировании кода из сканера GS-символ может потеряться или отображаться как пустой символ. При передаче полного DataMatrix в JSON убедитесь, что \u001d присутствует между блоками.

Валидация

Правила валидации UIT

Проверка Требование
Длина Ровно 31 символ (без ТН ВЭД) или ровно 38 символов (с ТН ВЭД)
Начало Начинается с 01 (AI для GTIN)
GTIN Позиции 2–15: 14 цифр
AI серийного номера Позиции 16–17: 21
Серийный номер Позиции 18–30: 13 символов из набора GS1 AI-21 (ASCII 33–122)
AI ТН ВЭД (если 38 символов) Позиции 31–33: 240
ТН ВЭД (если 38 символов) Позиции 34–37: 4 цифры
Уникальность Каждый UIT уникален для единицы товара

Примеры валидации и парсинга (Python)

import re

def validate_uit(uit):
    """Валидация UIT-кода"""
    # Серийный номер: 13 символов из набора GS1 AI-21 (ASCII 33-122)
    pattern_short = r'^01\d{14}21[!-z]{13}$'       # 31 символ
    pattern_long = r'^01\d{14}21[!-z]{13}240\d{4}$' # 38 символов
    
    if len(uit) == 31 and re.match(pattern_short, uit):
        return {'valid': True, 'type': 'UIT без ТН ВЭД'}
    elif len(uit) == 38 and re.match(pattern_long, uit):
        return {'valid': True, 'type': 'UIT с ТН ВЭД'}
    else:
        return {'valid': False, 'error': 'Неверный формат UIT'}


def parse_uit(uit):
    """Парсит UIT и возвращает компоненты"""
    result = {}
    
    if uit.startswith('01') and len(uit) >= 31:
        result['gtin'] = uit[2:16]       # 14 цифр GTIN
        result['serial'] = uit[18:31]     # 13 символов серийного номера
        
        if len(uit) == 38 and uit[31:34] == '240':
            result['tnved'] = uit[34:38]  # 4 цифры ТН ВЭД
    
    return result


# Примеры
validate_uit("010467003301005321gJk6o54AQBJfX")
# {'valid': True, 'type': 'UIT без ТН ВЭД'}

validate_uit("010467003301005321gJk6o54AQBJfX2406401")
# {'valid': True, 'type': 'UIT с ТН ВЭД'}

parse_uit("010467003301005321gJk6o54AQBJfX2406401")
# {'gtin': '04670033010053', 'serial': 'gJk6o54AQBJfX', 'tnved': '6401'}

Нормализация DataMatrix → UIT

Lamoda автоматически нормализует полный DataMatrix до UIT при получении через API. Внутренняя реализация использует парсинг по AI-идентификаторам: извлекаются AI 01 (GTIN), AI 21 (серийный номер) и опционально AI 240 (ТН ВЭД). Криптохвост (AI 91, 92) отбрасывается.

Если вы хотите нормализовать DataMatrix на своей стороне, рекомендуемый подход — парсинг по AI-идентификаторам:

def normalize_datamatrix(dm: str) -> str:
    """Извлечь UIT из полного DataMatrix через парсинг AI-идентификаторов.
    
    Подход аналогичен внутренней реализации Lamoda:
    1. Разбиваем по GS-символу (\x1d) на блоки
    2. Извлекаем GTIN (AI 01), серийный номер (AI 21), ТН ВЭД (AI 240)
    3. Собираем UIT, отбрасывая криптохвост (AI 91, 92)
    """
    blocks = dm.split('\x1d')
    
    gtin = None
    serial = None
    tnved = None
    
    # Первый блок: AI(01) + GTIN(14) + AI(21) + Serial(13) идут вместе
    first = blocks[0]
    if first.startswith('01') and len(first) >= 31:
        gtin = first[2:16]     # 14 цифр GTIN
        serial = first[18:31]  # 13 символов серийного номера
    
    # Ищем AI 240 (ТН ВЭД) в оставшихся блоках
    for block in blocks[1:]:
        if block.startswith('240'):
            tnved = block[3:7]  # 4 цифры ТН ВЭД
            break
        elif block.startswith('91') or block.startswith('92'):
            continue  # Пропускаем криптохвост
    
    # Также проверяем ТН ВЭД в первом блоке (если GS перед 240 отсутствует)
    if tnved is None and first.startswith('01') and len(first) > 31:
        tail = first[31:]
        if tail.startswith('240'):
            tnved = tail[3:7]
    
    if gtin is None or serial is None:
        raise ValueError(f'Не удалось распарсить DataMatrix: {dm[:40]}...')
    
    # Собираем UIT
    uit = f'01{gtin}21{serial}'
    if tnved:
        uit += f'240{tnved}'
    
    return uit


# Пример
full_dm = "010467003301005321gJk6o54AQBJfX\x1d2406401\x1d91ffd0\x1d92LGYcm3..."
uit = normalize_datamatrix(full_dm)
print(uit)  # 010467003301005321gJk6o54AQBJfX2406401

⚠ Рекомендация: Передавайте уже нормализованный UIT для предсказуемости. Автоматическая нормализация на стороне Lamoda — подстраховка, а не основной сценарий.

См. также

Помогла эта информация?

Да Нет
0/1000 Отправить
Частые проблемы в API
CIS-коды в API
Спросить у Lamoda Seller Assistant в Telegram