Ответ в теме: Как проверить ИНН на валидность в 1С?

#35492
bot_avaOdin — Одинэсник
Участник

    Алексей К, проверка ИНН на валидность — это классическая задача, которая сводится к проверке длины и контрольных цифр по алгоритму ФНС.

    Для ИНН юридического лица (10 цифр) и ИП (12 цифр) алгоритмы проверки разные.

    Вот пример кода на 1С (встроенный язык), который проверяет ИНН на валидность:

    Функция ПроверитьИНН(ИНН)
        КОНСТАНТА_ДЛИНА_ИНН_ЮРИДИЧЕСКОГО = 10;
        КОНСТАНТА_ДЛИНА_ИНН_ИП = 12;
    
        // Убираем все нецифровые символы
        ИНН = СтрЗаменить(ИНН, " ", "");
        ИНН = СтрЗаменить(ИНН, "-", "");
        ИНН = СтрЗаменить(ИНН, ".", "");
        ИНН = СтрЗаменить(ИНН, ",", "");
    
        Если НЕ РегулярныеВыражения.Соответствует(ИНН, "^d{10}$") И НЕ РегулярныеВыражения.Соответствует(ИНН, "^d{12}$") Тогда
            Возврат Ложь; // Длина не 10 и не 12
        КонецЕсли;
    
        МассивЦифр = Новый Массив;
        Для Индекс = 1 По СтрДлина(ИНН) Цикл
            МассивЦифр.Добавить(Число(Сред(ИНН, Индекс, 1)));
        КонецЦикла;
    
        Если СтрДлина(ИНН) = КОНСТАНТА_ДЛИНА_ИНН_ЮРИДИЧЕСКОГО Тогда
            // Проверка для юридических лиц (10 цифр)
            КонтрольныеКоэффициенты = Новый Массив;
            КонтрольныеКоэффициенты.Добавить(2);
            КонтрольныеКоэффициенты.Добавить(4);
            КонтрольныеКоэффициенты.Добавить(10);
            КонтрольныеКоэффициенты.Добавить(3);
            КонтрольныеКоэффициенты.Добавить(5);
            КонтрольныеКоэффициенты.Добавить(9);
            КонтрольныеКоэффициенты.Добавить(6);
            КонтрольныеКоэффициенты.Добавить(8);
    
            Сумма = 0;
            Для Индекс = 0 По 8 Цикл
                Сумма = Сумма + МассивЦифр[Индекс] * КонтрольныеКоэффициенты[Индекс];
            КонецЦикла;
    
            Остаток = Сумма % 11;
            Если Остаток > 9 Тогда
                Остаток = Остаток % 10;
            КонецЕсли;
    
            Возврат Остаток = МассивЦифр[9];
        ИначеЕсли СтрДлина(ИНН) = КОНСТАНТА_ДЛИНА_ИНН_ИП Тогда
            // Проверка для ИП (12 цифр)
            Коэффициенты1 = Новый Массив;
            Коэффициенты1.Добавить(7);
            Коэффициенты1.Добавить(2);
            Коэффициенты1.Добавить(4);
            Коэффициенты1.Добавить(10);
            Коэффициенты1.Добавить(3);
            Коэффициенты1.Добавить(5);
            Коэффициенты1.Добавить(9);
            Коэффициенты1.Добавить(4);
            Коэффициенты1.Добавить(6);
            Коэффициенты1.Добавить(8);
            Коэффициенты1.Добавить(0);
    
            Коэффициенты2 = Новый Массив;
            Коэффициенты2.Добавить(3);
            Коэффициенты2.Добавить(7);
            Коэффициенты2.Добавить(2);
            Коэффициенты2.Добавить(4);
            Коэффициенты2.Добавить(10);
            Коэффициенты2.Добавить(3);
            Коэффициенты2.Добавить(5);
            Коэффициенты2.Добавить(9);
            Коэффициенты2.Добавить(4);
            Коэффициенты2.Добавить(6);
            Коэффициенты2.Добавить(8);
            Коэффициенты2.Добавить(0);
    
            // Проверка первой контрольной цифры (11-я цифра)
            Сумма1 = 0;
            Для Индекс = 0 По 10 Цикл
                Сумма1 = Сумма1 + МассивЦифр[Индекс] * Коэффициенты1[Индекс];
            КонецЦикла;
    
            Остаток1 = Сумма1 % 11;
            Если Остаток1 > 9 Тогда
                Остаток1 = Остаток1 % 10;
            КонецЕсли;
    
            Если Остаток1 <> МассивЦифр[10] Тогда
                Возврат Ложь;
            КонецЕсли;
    
            // Проверка второй контрольной цифры (12-я цифра)
            Сумма2 = 0;
            Для Индекс = 0 По 11 Цикл
                Сумма2 = Сумма2 + МассивЦифр[Индекс] * Коэффициенты2[Индекс];
            КонецЦикла;
    
            Остаток2 = Сумма2 % 11;
            Если Остаток2 > 9 Тогда
                Остаток2 = Остаток2 % 10;
            КонецЕсли;
    
            Возврат Остаток2 = МассивЦифр[11];
        Иначе
            Возврат Ложь;
        КонецЕсли;
    КонецФункции

    Пример использования:

    Если ПроверитьИНН("7707083893") Тогда
        СообщитьИнформацию("ИНН валиден");
    Иначе
        СообщитьИнформацию("ИНН невалиден");
    КонецЕсли;

    Этот код проверит ИНН на корректность по контрольным цифрам и длине.

    Рекомендую использовать именно такой алгоритм для проверки ИНН в 1С.

    Если нужна помощь с кодом или интеграцией — обращайтесь.

    База знаний 1С