Каталог решений - Расшифровка DataMatrix кода с пачки сигарет (табачная продукция)

Расшифровка DataMatrix кода с пачки сигарет (табачная продукция)

Расшифровка DataMatrix кода с пачки сигарет (табачная продукция)

В наличии

Разбор считанного DataMatrix кода с пачки сигарет — какие символы за что отвечают. Декодирование МРЦ

Категория:

Описание

Сразу оговорюсь, что данный код не претендует на краткость или оптимальность. Он лишь призван показать состав кода DATAMATRIX с пачки табачной продукции и, главным образом, алгоритм кодирования значения максимальной розничной цены (МРЦ) в этом самом коде.

Итак. При считывании 2D-сканером кода DATAMATRIX с пачки, мы получаем строку.

Пример с реальной упаковки: "046062030980264!2zVAAADD8JV/x", где:

1. первые 14 символов (цифры) "04606203098026" — содержат код товара (GTIN);

2. следующие 7 символов (цифр, строчных и прописных букв латинского алфавита, а также специальных символов) "4!2zVAA" — индивидуальный серийный номер упаковки табачной продукции;

3. следующие 4 символа (цифр, строчных и прописных букв латинского алфавита, а также специальных символов) "ADD8" — максимальная розничная цена (МРЦ) в копейках закодированная по строке из 80 символов "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!"%&’*+-./_,:;=<>?";

4. последние 4 символа (цифр, строчных и прописных букв латинского алфавита, а также специальных символов) "JV/x" — код проверки

Процедура РасшифроватьDataMatrixСПачкиСигарет()
	//Считываем содержание кода DataMatrix с пачки сигарет
	//Описание содержания кода:
	// - первая группа состоит из 14 цифр и содержит код товара;
	// - вторая группа состоит из 7 символов (цифр, строчных и прописных букв латинского алфавита, а также специальных символов) и содержит индивидуальный серийный номер упаковки табачной продукции;
	// - третья группа состоит из 4 символов (цифр,строчных и прописных букв латинского алфавита, а также специальных символов) и содержит в перекодированном виде максимальную розничную цену потребительской упаковки с точностью до одной копейки;
	// - четвертая группа состоит из 4 символов (цифр, строчных и прописных букв латинского алфавита, а также специальных символов) и содержит код проверки.	
	
	//В данном случае содержание кода указано явно, для примера
	СодержаниеКодаDATAMATRIX = "046062030980264!2zVAAADD8JV/x";
	//Выделяем код товара - первые 14 символов
	ИдентификаторGTIN = Лев(СодержаниеКодаDATAMATRIX,14);
	//Выделяем серийный номер упаковки - 7 символов после кода товара
	СерийныйНомер = Сред(СодержаниеКодаDATAMATRIX,15,7);
	//Выделяем МРЦ в зашифрованном виде - 4 символа после серийного номера упаковки
	МРЦИзШтрихКода = Сред(СодержаниеКодаDATAMATRIX,22,4);
	//Выделяем код проверки - последние 4 символа
	КодПроверки = Прав(СодержаниеКодаDATAMATRIX,4);
	//Получаем МРЦ в десятиричном виде (в копейках)
	ДесятичноеЧислоМРЦ = ПолучитьДесятичноеМРЦ(МРЦИзШтрихКода);
	//Если получили десятичное значение МРЦ в копейках, пересчитываем в рубли 
	Если ДесятичноеЧислоМРЦ <> Неопределено Тогда
		МРЦ = ДесятичноеЧислоМРЦ/100;
	КонецЕсли;
КонецПроцедуры

//Функция декодирования максимальной розничной цены с пачки (табачная продукция). Алгоритм кодирования.
Функция ПолучитьДесятичноеМРЦ(МРЦИзШтрихКода)
	//Строка кодирования МРЦ
	//ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!"%&'*+-./_,:;=<>?
	//!!!ВАЖНО
	//!!!Если строка кодирования устанавливается не в коде,
	//!!!а в значении реквизита (константы, справочники и т.п.,
	//!!!то строку брать из комментария,
	//!!!т.к. в значении переменной СтрокаКодирования в коде функции присутствуют лишние кавычки
	СтрокаКодирования = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!""%&'*+-./_,:;=<>?";
	ДлинаСтрокиКодирования = СтрДлина(СтрокаКодирования);
	ДлинаЦеныИзШтрихКода = СтрДлина(МРЦИзШтрихКода);
	ДесятичноеЧисло = 0;
	Для Сч = 1 По ДлинаЦеныИзШтрихКода Цикл
		ТекМножитель = Pow(ДлинаСтрокиКодирования,ДлинаЦеныИзШтрихКода-Сч);
		ТекСимвол = Сред(МРЦИзШтрихКода,Сч,1);
		ПозицияСимволаВСтрокеКодирования = Найти(СтрокаКодирования,ТекСимвол);
		Если ПозицияСимволаВСтрокеКодирования = 0 Тогда
			Возврат Неопределено;
		КонецЕсли;
		ТекМножимое = ПозицияСимволаВСтрокеКодирования-1;
		ДесятичноеЧисло = ДесятичноеЧисло + ТекМножимое*ТекМножитель;
	КонецЦикла;
	Возврат ДесятичноеЧисло;
КонецФункции

 

has been added to your cart:
Оформление заказа