ПопыткаПеревестиВЧисло

оглавлениеПроверитьКПП

ПроверитьИНН (1С 8.3, 1С 8.2)

Функция проверяет переданную ей строку с ИНН (10 цифр для юридического и 12 цифр для физического лица) на предмет корректности согласно алгоритму расчета контрольного числа. Возвращает Истина, если всё Ок, иначе Ложь.

Функция ПроверитьИНН(Знач Значение) Экспорт
 
    ИНН = СокрЛП(Значение);
 
    Если Не ПопыткаПеревестиВЧисло(ИНН) Тогда
        Возврат Ложь;
    КонецЕсли;
 
    Если СтрДлина(ИНН) = 10 Тогда
 
        Коэффициенты = Новый Массив(10);
        Коэффициенты[0] = 2;
        Коэффициенты[1] = 4;
        Коэффициенты[2] = 10;
        Коэффициенты[3] = 3;
        Коэффициенты[4] = 5;
        Коэффициенты[5] = 9;
        Коэффициенты[6] = 4;
        Коэффициенты[7] = 6;
        Коэффициенты[8] = 8;
        Коэффициенты[9] = 0;
 
        КонтрольнаяСумма = 0;
        Для А = 1 По 10 Цикл
            Число = Число(Сред(ИНН, А, 1));
            КонтрольнаяСумма = КонтрольнаяСумма + 
                Число * Коэффициенты[А - 1];
        КонецЦикла;
 
        КонтрольноеЧисло = КонтрольнаяСумма % 11;
        Если КонтрольноеЧисло > 9 Тогда
            КонтрольноеЧисло = КонтрольноеЧисло % 10;
        КонецЕсли;
 
        Возврат КонтрольноеЧисло = Число(Сред(ИНН, 10, 1));
 
    ИначеЕсли СтрДлина(ИНН) = 12 Тогда
 
        Коэффициенты = Новый Массив(12);
        Коэффициенты[0] = 3;
        Коэффициенты[1] = 7;
        Коэффициенты[2] = 2;
        Коэффициенты[3] = 4;
        Коэффициенты[4] = 10;
        Коэффициенты[5] = 3;
        Коэффициенты[6] = 5;
        Коэффициенты[7] = 9;
        Коэффициенты[8] = 4;
        Коэффициенты[9] = 6;
        Коэффициенты[10] = 8;
        Коэффициенты[11] = 0;
 
        КонтрольнаяСумма11 = 0;
        Для А = 1 По 11 Цикл
            Число = Число(Сред(ИНН, А, 1));
            КонтрольнаяСумма11 = КонтрольнаяСумма11 + 
                Число * Коэффициенты[А];
        КонецЦикла;
 
        КонтрольноеЧисло11 = КонтрольнаяСумма11 % 11;
        Если КонтрольноеЧисло11 > 9 Тогда
            КонтрольноеЧисло11 = КонтрольноеЧисло11 % 10;
        КонецЕсли;
 
        Если КонтрольноеЧисло11 <> Число(Сред(ИНН, 11, 1)) Тогда
            Возврат Ложь;
        КонецЕсли;
 
        КонтрольнаяСумма12 = 0;
        Для А = 1 По 12 Цикл
            Число = Число(Сред(ИНН, А, 1));
            КонтрольнаяСумма12 = КонтрольнаяСумма12 + 
                Число * Коэффициенты[А - 1];
        КонецЦикла;
 
        КонтрольноеЧисло12 = КонтрольнаяСумма12 % 11;
        Если КонтрольноеЧисло12 > 9 Тогда
            КонтрольноеЧисло12 = КонтрольноеЧисло12 % 10;
        КонецЕсли;
 
        Если КонтрольноеЧисло12 <> Число(Сред(ИНН, 12, 1)) Тогда
            Возврат Ложь;
        КонецЕсли;
 
        Возврат Истина;
 
    Иначе
        Возврат Ложь;
    КонецЕсли;
 
КонецФункции
С уважением, (школа 1С программистов).

Подписывайтесь и получайте новые статьи и обработки на почту (не чаще 1 раза в неделю).

Вступайте в мою группу ВКонтакте, Одноклассниках, Facebook или Google+ — самые последние обработки, исправления ошибок в 1С, всё выкладываю там в первую очередь.

Владимир Милькин
Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.



ПопыткаПеревестиВЧисло

оглавлениеПроверитьКПП