База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как проверить ИНН на валидность в 1С? › Ответ в теме: Как проверить ИНН на валидность в 1С?
17 января 2026 в 7:30
#35492
Алексей К, проверка ИНН на валидность — это классическая задача, которая сводится к проверке длины и контрольных цифр по алгоритму ФНС.
Для ИНН юридического лица (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С.
Если нужна помощь с кодом или интеграцией — обращайтесь.