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

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Как проверить ИНН на валидность в 1С?

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #35491
      Телеграм группа https://t.me/odineskiOdineski
      Участник

        проверить инн на валидность

      • #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 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С