как пример (код для 1С 77, функция возвращает текстовую информацию - либо "Ошибка" ...", либо тип ШК - "EAN-8","EAN-13","UPS-A" или "ITF-14"):
Код:
//*******************************************
Функция ПроверитьEanНаЗапрешенныеСимволы(парEAN = "")
тЗапрещенныеДляEanСимволы = "'~`@""""№#$;%:^&?*()-_+=|\/ {[]},. <>QWERTYUIOPASDFGHJKLZXCVBNMЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ";
ЕстьЗапрещенныеСимволы = 0;
Для НомСимвола = 1 По СтрДлина(парEAN) Цикл
текСимвол = Сред(парEAN,НомСимвола,1);
Если Найти(тЗапрещенныеДляEanСимволы, текСимвол) > 0 Тогда
ЕстьЗапрещенныеСимволы = 1;
Прервать;
КонецЕсли;
КонецЦикла;
Возврат ЕстьЗапрещенныеСимволы;
КонецФункции
//==========================================
Функция ПроверкаВалидностиШК(парКод)
ТекКод = СокрЛП(парКод);
ДлинаТекКод = СтрДлина(ТекКод);
Если ДлинаТекКод = 0 Тогда
Возврат "Ошибка! Пустой штрих-код!";
ИначеЕсли (Найти("8,12,13,14", СокрЛП(ДлинаТекКод)) = 0) или (ДлинаТекКод < 8) Тогда
Возврат "Ошибка! " + Лев(ТекКод,50);
ИначеЕсли ПроверитьEanНаЗапрешенныеСимволы(ВРЕГ(ТекКод)) = 1 Тогда
Возврат "Ошибка! Некорректный штрихкод!";
ИначеЕсли Лев(ТекКод,3) = "000" Тогда
Возврат "Ошибка! Некорректный штрихкод!";
КонецЕсли;
Сум1=0;
Сум2=0;
ТипКода = "ITF-14EAN-13UPS-A EAN-8 ";
ПолныйШтрихКод = ДополнитьСтроку(ТекКод,14);
Сдвиг = 14 - ДлинаТекКод;
Для чет = 1 по 13 Цикл
нечет = чет + 1;
Сум1 = Сум1 + Число(Сред(ПолныйШтрихКод,чет,1));
Сум2 = ?(нечет = 14, Сум2, Сум2+Число(Сред(ПолныйШтрихКод,нечет,1)));
чет = чет + 1;
КонецЦикла;
Сум3 = Сум1*3 + Сум2;
КР = ?(Цел(Сум3/10)*10 + 10 - Сум3 = 10, 0, Цел(Сум3/10)*10 + 10 - Сум3);
Если КР <> Число(Прав(ПолныйШтрихКод,1)) Тогда
Возврат "Ошибка! Неверный штрих-код: " + ТекКод + " (КР <> "+КР+")";
КонецЕсли;
Возврат СокрЛП(Сред(ТипКода, Сдвиг*6 + 1,6));
КонецФункции
Так же можно отсекать ШК, начинающиеся на цифру "2", т.к. это - однозначно внутренние ШК и они лишены уникальности.