//******************************************************************************
Функция NumberToUpperChar( Num ) Экспорт
UpperCharSet = "ABCDEFGHIJ";
Num = Число(Прав(Num,1));
Стр = Сред(UpperCharSet, Num + 1, 1);
Возврат Стр;
КонецФункции
Функция NumberToLowerChar( Num ) Экспорт
LowerCharSet = "abcdefghij";
Num = Число(Прав(Num,1));
Стр = Сред(LowerCharSet, Num + 1, 1);
Возврат Стр;
КонецФункции
//***************************
Функция СформироватьКодEAN13(код) Экспорт
// Проверки
Если ТипЗначения(код) <> 1 Тогда
Сообщить("Код для EAN13 должен числовым.");
Возврат "";
КонецЕсли;
Если СтрДлина(код) > 13 Тогда
Сообщить("Код для EAN13 должен быть длинной не более 12 символов.");
Возврат "";
КонецЕсли;
// Разбор строки
ПервыйФлаг = Число(Сред(код,1,1));
левстр = Сред(код,2,6);
правстр = Сред(код,8,6);
правкод = "";
Для Поз = 1 По 6 Цикл
правкод = правкод + NumberToLowerChar(Сред(правстр,Поз,1));
КонецЦикла;
// Формирование левой части кода зависит от значениа ПервыйФлаг
Если ПервыйФлаг = 0 Тогда
// 0 A A A A A
левкод = "#!" + Лев(левстр,1)
+ Сред(левстр,2,1)
+ Сред(левстр,3,1)
+ Сред(левстр,4,1)
+ Сред(левстр,5,1)
+ Сред(левстр,6,1);
ИначеЕсли ПервыйФлаг = 1 Тогда
// 1 A A B A B B
левкод = "$!"
+ Лев(левстр,1)
+ Сред(левстр,2,1)
+ NumberToUpperChar(Сред(левстр,3,1))
+ Сред(левстр,4,1)
+ NumberToUpperChar(Сред(левстр,5,1))
+ NumberToUpperChar(Сред(левстр,6,1));
ИначеЕсли ПервыйФлаг = 2 Тогда
// 2 A A B B A B
левкод = "%!"
+ Лев(левстр,1)
+ Сред(левстр,2,1)
+ NumberToUpperChar(Сред(левстр,3,1))
+ NumberToUpperChar(Сред(левстр,4,1))
+ Сред(левстр,5,1)
+ NumberToUpperChar(Сред(левстр,6,1));
ИначеЕсли ПервыйФлаг = 3 Тогда
// 3 A A B B B A
левкод = "&!"
+ Лев(левстр,1)
+ Сред(левстр,2,1)
+ NumberToUpperChar(Сред(левстр,3,1))
+ NumberToUpperChar(Сред(левстр,4,1))
+ NumberToUpperChar(Сред(левстр,5,1))
+ Сред(левстр,6,1);
ИначеЕсли ПервыйФлаг = 4 Тогда
// 4 A B A A B B
левкод = "'!"
+ Лев(левстр,1)
+ NumberToUpperChar(Сред(левстр,2,1))
+ Сред(левстр,3,1)
+ Сред(левстр,4,1)
+ NumberToUpperChar(Сред(левстр,5,1))
+ NumberToUpperChar(Сред(левстр,6,1));
ИначеЕсли ПервыйФлаг = 5 Тогда
// 5 A B B A A B
левкод = "(!"
+ Лев(левстр,1)
+ NumberToUpperChar(Сред(левстр,2,1))
+ NumberToUpperChar(Сред(левстр,3,1))
+ Сред(левстр,4,1)
+ Сред(левстр,5,1)
+ NumberToUpperChar(Сред(левстр,6,1));
ИначеЕсли ПервыйФлаг = 6 Тогда
// 6 A B B B A A
левкод = ")!"
+ Лев(левстр,1)
+ NumberToUpperChar(Сред(левстр,2,1))
+ NumberToUpperChar(Сред(левстр,3,1))
+ NumberToUpperChar(Сред(левстр,4,1))
+ Сред(левстр,5,1)
+ Сред(левстр,6,1);
ИначеЕсли ПервыйФлаг = 7 Тогда
// 7 A B A B A B
левкод = "*!"
+ Лев(левстр,1)
+ NumberToUpperChar(Сред(левстр,2,1))
+ Сред(левстр,3,1)
+ NumberToUpperChar(Сред(левстр,4,1))
+ Сред(левстр,5,1)
+ NumberToUpperChar(Сред(левстр,6,1));
ИначеЕсли ПервыйФлаг = 8 Тогда
// 8 A B A B B A
левкод = "+!"
+ Лев(левстр,1)
+ NumberToUpperChar(Сред(левстр,2,1))
+ Сред(левстр,3,1)
+ NumberToUpperChar(Сред(левстр,4,1))
+ NumberToUpperChar(Сред(левстр,5,1))
+ Сред(левстр,6,1);
ИначеЕсли ПервыйФлаг = 9 Тогда
// 9 A B B A B A
левкод = ",!"
+ Лев(левстр,1)
+ NumberToUpperChar(Сред(левстр,2,1))
+ NumberToUpperChar(Сред(левстр,3,1))
+ Сред(левстр,4,1)
+ NumberToUpperChar(Сред(левстр,5,1))
+ Сред(левстр,6,1);
КонецЕсли;
// Получение строки - результата
кодстр = левкод + "-" + правкод + "!";
Возврат кодстр;
КонецФункции // СформироватьКодEAN13()