Формирование штрихкода EAN-13 шрифтом EanGnivc
Функция преобразования текстового представления ШК к последовательности символов шрифта EanGnivc
- Описание
- Подробнее
Описание
Способ кодирования каждого символа штрихкода по алгоритму EAN зависит не только от его значения, но и от положения. Таким образом, для вывода штрихкода шрифтом EanGnivc, недостаточно указать шрифт — штрихкод должен быть преобразован из текстового представления «2880000004097» в строку вида «%!88AA0A-aaeajh!». Что и делает представленная функция.
upd
Добавил поддержку формирования EAN-8
Функция СформироватьСтрокуEanGnivc(ШтрихкодСтрокойСимволов) Экспорт
Попытка
Тест = Число(ШтрихкодСтрокойСимволов);
Исключение
ВызватьИсключение «Штрихкод может содержать только цифры»;
КонецПопытки;
СимволыСпособовКодирования = «#$%&'()*+,»;
ЛевыйЗащитныйШаблон = «!»;
СреднийЗащитныйШаблон = «-«;
ПравыйЗащитныйШаблон = «!»;
СимволыШрифтаПоТипамКодов = Новый Соответствие;
СимволыШрифтаПоТипамКодов.Вставить(«L», «0123456789»);
СимволыШрифтаПоТипамКодов.Вставить(«G», «ABCDEFGHIJ»);
СимволыШрифтаПоТипамКодов.Вставить(«R», «abcdefghij»);
СпособыКодированияЛевойЧасти = Новый Массив;
СпособыКодированияЛевойЧасти.Добавить(«LLLLLL»);
СпособыКодированияЛевойЧасти.Добавить(«LLGLGG»);
СпособыКодированияЛевойЧасти.Добавить(«LLGGLG»);
СпособыКодированияЛевойЧасти.Добавить(«LLGGGL»);
СпособыКодированияЛевойЧасти.Добавить(«LGLLGG»);
СпособыКодированияЛевойЧасти.Добавить(«LGGLLG»);
СпособыКодированияЛевойЧасти.Добавить(«LGGGLL»);
СпособыКодированияЛевойЧасти.Добавить(«LGLGLG»);
СпособыКодированияЛевойЧасти.Добавить(«LGLGGL»);
СпособыКодированияЛевойЧасти.Добавить(«LGGLGL»);
СпособКодированияПравойЧасти = «RRRRRR»;
Если СтрДлина(ШтрихкодСтрокойСимволов) = 13 Тогда
КоличествоСимволовВГруппе = 6;
ИначеЕсли СтрДлина(ШтрихкодСтрокойСимволов) = 8 Тогда
КоличествоСимволовВГруппе = 4;
СимволыСпособовКодирования = «»;
ШтрихкодСтрокойСимволов = «0»+ШтрихкодСтрокойСимволов;
Иначе
ВызватьИсключение «Поддерживаются только штрихкоды длиной 13 и 8 символов»;
КонецЕсли;
ИндексСпособаКодирования = Число(Лев(ШтрихкодСтрокойСимволов,1));
ЛеваяЧастьКода = «»;
ПраваяЧастьКода = «»;
Для ИндексСимвола = 1 По КоличествоСимволовВГруппе Цикл
ЛеваяЧастьКода = ЛеваяЧастьКода
+ Сред(СимволыШрифтаПоТипамКодов[Сред(СпособыКодированияЛевойЧасти[ИндексСпособаКодирования],ИндексСимвола,1)]
,Число(Сред(ШтрихкодСтрокойСимволов,(ИндексСимвола+1),1))+1
,1);
ПраваяЧастьКода = ПраваяЧастьКода
+ Сред(СимволыШрифтаПоТипамКодов[Сред(СпособКодированияПравойЧасти,ИндексСимвола,1)]
,Число(Сред(ШтрихкодСтрокойСимволов,(ИндексСимвола+КоличествоСимволовВГруппе+1),1))+1
,1);
КонецЦикла;
Результат = «» + Сред(СимволыСпособовКодирования,ИндексСпособаКодирования+1,1)
+ ЛевыйЗащитныйШаблон
+ ЛеваяЧастьКода
+ СреднийЗащитныйШаблон
+ ПраваяЧастьКода
+ ПравыйЗащитныйШаблон;
Возврат Результат;
КонецФункции

