ПроверитьИНН (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С программистов и разработчик
обновлятора).
Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте
нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.
Нажмите одну из кнопок, чтобы поделиться: