Расчет контрольной цифры для GTIN-8, GTIN-13

Алгоритм расчёта контрольного разряда в кодах GS1-13,    GS1-8, ITF-14

Практически во всех системах нумерации системы GS1 (GS1-13, GS1-14 (ITF-14), GS1-8, UPC) используется понятие контрольного числа, а, точнее, контрольной цифры. Роль контрольной цифры огромна — она позволяет безошибочно определять,  правильно ли считан штриховой код в супермаркете, банке или в любой другой системе, использующей штриховое кодирование. Алгоритм определения контрольного числа некоторого набора цифр для системы GS1 носит название «Модуло 10».

Он состоит из следующих шагов:

  1. Цифры набора нумеруются справа налево.
  2. Подсчитываются суммы цифр, стоящих на четных и нечетных местах.
  3. Сумма цифр, стоящих на четных местах, суммируется с утроенной суммой цифр, стоящих на нечетных местах.
  4. Если цифра единиц полученного результата равна нулю, то контрольная цифра — 0. Если последняя цифра результата не нуль, то контрольная цифра равна дополнению этой цифры до 10.

Пример: Пусть имеется набор цифр в системе EAN-13 — 345678905675 C.

  • Цифры, стоящие на нечетных местах: 5,6,0,8,6,4. Сумма этих цифр равна 29.
  • Цифры, стоящие на четных местах:7,5,9,7,5,3 . Сумма этих цифр равна 36.
  • Результат 3-го шага: 29*3+36=123.
  • Искомая контрольная цифра C=7, т.к. 7+3 = 10.
// Расчет контрольной цифры для GTIN-8. 
//
// Параметры:
//  GTIN - Текстовая строка с GTIN-8. Может содержать числа от 0 до 9. 
// 
// Возвращаемое значение:
//   - Контрольный символ (число) рассчитанный по алгоритму для GTIN.
//
Функция РассчитатьКонтрольныйСимволGTIN8(Знач GTIN) Экспорт
	
	Сумма = 0;
	Коэффициент = 3;
	
	Для Сч = 1 По 7 Цикл
		ВремКодСимвола = КодСимвола(GTIN, Сч);
		Сумма  = Сумма + Коэффициент * (ВремКодСимвола - 48);
		Коэффициент = 4 - Коэффициент;
	КонецЦикла;
	Сумма = (10 - Сумма % 10) % 10;
	КонтрольныйСимвол = Символ(Сумма + 48);
	
	Возврат КонтрольныйСимвол;
	
КонецФункции


//////////////////////////////////////



// Расчет контрольной цифры для GTIN-13. 
//
// Параметры:
//  GTIN - Текстовая строка с GTIN-13. Может содержать числа от 0 до 9.
// 
// Возвращаемое значение:
//   - Контрольный символ (число) рассчитанный по алгоритму для GTIN.
//
Функция РассчитатьКонтрольныйСимволGTIN13(Знач GTIN) Экспорт
	
	Сумма = 0;
	Коэффициент = 1;
	
	Для Сч = 1 По 12 Цикл
		ВремКодСимвола = КодСимвола(GTIN, Сч);
		Сумма  = Сумма + Коэффициент * (ВремКодСимвола - 48);
		Коэффициент = 4 - Коэффициент;
	КонецЦикла;
	Сумма = (10 - Сумма % 10) % 10;
	КонтрольныйСимвол = Символ(Сумма + 48);
	
	Возврат КонтрольныйСимвол;
	
КонецФункции