helpf.pro
Регистрация
 +1 
Распечатать

1С 8.x : Функция проверки соответствия введенного ИНН контрагента требованиям

Идентификационный номер налогоплательщика
Идентификационный номер налогоплательщика (ИНН) - в Российской Федерации уникальный код используемый при учете в налоговом органе юридических и физических лиц. ИНН юридических лиц (организаций) состоит из 10 цифр. ИНН физических лиц, в т.ч. индивидуальных предпринимателей состоит из 12 цифр.

ИНН указывается налогоплательщиками в документах, предусмотренных законодательством, подаваемых в налоговые органы. Для идентификации отдельного подразделения организации, в связи с постановкой на учет в разных налоговых органах применяется код причины постановки (КПП).

Структура ИНН юридического лица

ИНН юридического лица состоит из 10 последовательных цифр.

1-2: код субъекта Российской Федерации.

3-4: номер налоговой инспеции в субъекте РФ.

1-4: код налоговой инспекции по СОУН (Справочник кодов обозначения налоговых органов для целей учёта налогоплательщиков) осуществивщей регистрацию.

5-9: номер записи в территориальном разделе ЕГРН (Единый государственный реестр налогоплательщиков).

10: контрольная цифра.

Структура ИНН физического лица

ИНН юридического лица состоит из 10 последовательных цифр.

1-2: код субъекта Российской Федерации.

3-4: номер налоговой инспеции в субъекте РФ.

1-4: код налоговой инспекции по СОУН осуществивщей регистрацию.

5-10: номер записи в территориальном разделе ЕГРН.

11-12: контрольные цифры.

Для проверки ИНН можно обратиться в налоговый орган за выпиской из ЕГРН или провести проверку контрольных цифр в соответствии со следующим алгоритмом:


1. Для расчета десятого контрольного разряда в 10-ти значном ИНН каждая цифра ИНН (кроме десятой) умножается на соответствующий множитель в соответствии с таб.1 , ззатем все значения суммируются , сумма берется по модулю 11, затем полученное число берется по модулю 10 это и есть десятый разряд.

2. Для расчета 11-ого контрольного разряда (1-ой контрольной цифры) в 12-ти значном ИНН каждая цифра ИНН (кроме 11-ой и 12-ой) умножается на соответствующий множитель в соответствии с таб.1 , затем все значения суммируются , сумма берется по модулю 11, затем полученное число берется по модулю 10 это и есть 11-ый разряд.

3. Для расчета 12-ого контрольного разряда (2-ой контрольной цифры) в 12-ти значном ИНН каждая цифра ИНН (кроме12-ой) ,11-ая вычисляется в соотв. с пред. пунктом, умножается на соответствующий множитель в соответствии с таб.1 , затем все значения суммируются , сумма берется по модулю 11, затем полученное число берется по модулю 10 это и есть 12-ый разряд.
title

Конкретные примеры

ИНН 500100732259 — 12 цифр (первый попавшийся в Интернете ИНН).

Шаг 1: 5* 7+ 0* 2+ 0* 4+ 1* 10+ 0* 3+ 0* 5+ 7* 9+ 3* 4+ 2* 6+ 2* 8= 148
148= 11* 13 + 5(остаток); совпадает
Шаг 2: 5* 3+ 0* 7+ 0* 2+ 1* 4+ 0* 10+ 0* 3+ 7* 5+ 3* 9+ 2* 4+ 2* 6+ 5* 8= 141141= 11* 12 +9(остаток); совпадает
Оба контрольных числа совпадают, номер правильный.

ИНН 7830002293 — 10 цифр (Санкт-Петербургская бумажная фабрика Гознака).

Шаг 1: 7* 2+ 8* 4+ 3* 10+ 0* 3+ 0* 5+ 0* 9+ 2* 4+ 2* 6+ 9* 8= 168168= 11* 15 +3(остаток)
Контрольное число совпадает, номер правильный.

Функция проверки соответствия ИНН требованиям:
Код 1C v 8.х
 // Параметры:
// ИНН - строка - проверяемый индивидуальный номер налогоплательщика,
// ВладелецИНН - ПеречислениеСсылка.ЮрФизЛицо - тип владельца ИНН: физлицо или юрлицо
Функция ИННСоответствуетТребованиям(Знач ИНН, ВладелецИНН) Экспорт

ИНН = СокрЛП(ИНН);
ДлинаИНН = СтрДлина(ИНН);

Если НЕ ТолькоЦифрыВСтроке(ИНН) Тогда
Возврат Ложь;
КонецЕсли;

Если ДлинаИНН = 10 и ВладелецИНН = Перечисления.ЮрФизЛицо.ЮрЛицо Тогда

КонтрольнаяСумма = 0;

Для Н = 1 По 9 Цикл

Если Н = 1 Тогда
Множитель = 2;
ИначеЕсли Н = 2 Тогда
Множитель = 4;
ИначеЕсли Н = 3 Тогда
Множитель = 10;
ИначеЕсли Н = 4 Тогда
Множитель = 3;
ИначеЕсли Н = 5 Тогда
Множитель = 5;
ИначеЕсли Н = 6 Тогда
Множитель = 9;
ИначеЕсли Н = 7 Тогда
Множитель = 4;
ИначеЕсли Н = 8 Тогда
Множитель = 6;
ИначеЕсли Н = 9 Тогда
Множитель = 8;
КонецЕсли;

Цифра = Число(Сред(ИНН,Н,1));
КонтрольнаяСумма = КонтрольнаяСумма + Цифра * Множитель;

КонецЦикла;

КонтрольныйРазряд = (КонтрольнаяСумма %11) %10;

Если КонтрольныйРазряд <> Число(Сред(ИНН,10,1)) Тогда
Возврат Ложь;
КонецЕсли;

ИначеЕсли ДлинаИНН =12 и ВладелецИНН = Перечисления.ЮрФизЛицо.ФизЛицо Тогда

КонтрольнаяСумма11 = 0;
КонтрольнаяСумма12 = 0;

Для Н=1 По 11 Цикл

// Расчет множителя для 11-го и 12-го разрядов
Если Н = 1 Тогда
Множитель11 = 7;
Множитель12 = 3;
ИначеЕсли Н = 2 Тогда
Множитель11 = 2;
Множитель12 = 7;
ИначеЕсли Н = 3 Тогда
Множитель11 = 4;
Множитель12 = 2;
ИначеЕсли Н = 4 Тогда
Множитель11 = 10;
Множитель12 = 4;
ИначеЕсли Н = 5 Тогда
Множитель11 = 3;
Множитель12 = 10;
ИначеЕсли Н = 6 Тогда
Множитель11 = 5;
Множитель12 = 3;
ИначеЕсли Н = 7 Тогда
Множитель11 = 9;
Множитель12 = 5;
ИначеЕсли Н = 8 Тогда
Множитель11 = 4;
Множитель12 = 9;
ИначеЕсли Н = 9 Тогда
Множитель11 = 6;
Множитель12 = 4;
ИначеЕсли Н = 10 Тогда
Множитель11 = 8;
Множитель12 = 6;
ИначеЕсли Н = 11 Тогда
Множитель11 = 0;
Множитель12 = 8;
КонецЕсли;

Цифра = Число(Сред(ИНН,Н,1));
КонтрольнаяСумма11 = КонтрольнаяСумма11 + Цифра * Множитель11;
КонтрольнаяСумма12 = КонтрольнаяСумма12 + Цифра * Множитель12;

КонецЦикла;

КонтрольныйРазряд11 = (КонтрольнаяСумма11 %11) %10;
КонтрольныйРазряд12 = (КонтрольнаяСумма12 %11) %10;

Если КонтрольныйРазряд11 <> Число(Сред(ИНН,11,1))
ИЛИ КонтрольныйРазряд12 <> Число(Сред(ИНН,12,1)) Тогда
Возврат Ложь;
КонецЕсли;

Иначе
Возврат Ложь;
КонецЕсли;
Возврат Истина;
КонецФункции
Разместил:   Версии: | 8.x |  Дата:   Прочитано: 38229
 +1 
Распечатать
Возможно, вас также заинтересует
17 правил для составления оптимального ЗАПРОСа к данным базы 1С 50
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ
1С 8.x : Как убрать лидирующие нули в номере Документа (вариант2) 0
Скопировать строку с номером, с лидирующими нулями, в числовом поле (с форматом без групп, без группировки), и вернуть(скопировать) обратно в строковом поле с номером. Возвращает без нулей.
COM-подключение к базе 7.7 из 8.2 1С 7
Если код выполняется на стороне клиента, то необходимо наличие базы 7.7 на локальной машине. Пример (На форме объекта присутствует реквизит Таблица(ТаблицаЗначений)): НаКлиенте Процедура Загрузки() ПутьКБазе=" D:ВашаБаза1с77" ; Пользователь=
COM-соединение не обнаружило свободной лицензии / ключ защиты 0
Иногда при подключении к 1С возникает ошибка: COM-соединение не обнаружило свободной лицензии! COM-соединение не обнаружило ключ защиты программы! https://helpf.pro/uploads/img/_1-UsuyAg6E2P.jpg В таких случаях, иногда, может помочь следующий с
Cклонения по падежам 6
НаКлиенте Процедура Команда1(Команда) ФИО = " Иванов Иван Иванович" ; Падеж = 2; Пол = 1; Результат = СклонениеФИО(ФИО, Падеж, пол); Сообщить(Результат); КонецПроцедуры НаСервере Функция СклонениеФИО(ФИО, Падеж, пол) Результат = " " ;
Посмотреть все результаты поиска похожих
Комментарии
Jgd
06.02.2020 07:27Комментарий: 2
Jgd
Код 1C v 8.3
 
//очередная проверка валидного ИНН
Функция ВалидацияИНН(Знач ИНН, этоЮрЛицо, ОписаниеОшибки  = неопределено) Экспорт
ИНН = СокрЛП(ИНН);

фРезультатОК = истина;

ДлинаИНН = 0;

Если ПустаяСтрока(ИНН) Тогда
ОписаниеОшибки = "ИНН пуст";
фРезультатОК = ложь;
Иначе
ДлинаИНН = СтрДлина(ИНН);
Если этоЮрЛицо И ДлинаИНН <> 10 Тогда
ОписаниеОшибки = "ИНН юрлица может состоять только из 10 цифр";
фРезультатОК = ложь;
ИначеЕсли НЕ этоЮрЛицо И ДлинаИНН <> 12 тогда
ОписаниеОшибки = "ИНН физлица может состоять только из 12 цифр";
фРезультатОК = ложь;
Иначе
мЦифры = СтрРазделить("0,1,2,3,4,5,6,7,8,9", ",");
Для каждого Цифра Из мЦифры Цикл
Если СтрНайти(ИНН, Цифра) > 0 Тогда
ИНН = СтрЗаменить(ИНН, Цифра, Цифра + ",")
КонецЕсли;
КонецЦикла;
ИНН = СтрРазделить(ИНН, ",", ложь);
Если ИНН.Количество() <> ДлинаИНН Тогда
ОписаниеОшибки = "ИНН может состоять только из цифр";
фРезультатОК = ложь;
КонецЕсли;
КонецЕсли;
КонецЕсли;

Если фРезультатОК Тогда
мКоэффициенты = новый массив;
Если ДлинаИНН = 10 Тогда//ЮрЛица
мКоэффициенты.Добавить(СтрРазделить("2,4,10,3,5,9,4,6,8",","));
ИначеЕсли ДлинаИНН = 12 Тогда//ФизЛица
мКоэффициенты.Добавить(СтрРазделить("7,2,4,10,3,5,9,4,6,8",","));
мКоэффициенты.Добавить(СтрРазделить("3,7,2,4,10,3,5,9,4,6,8",","));
КонецЕсли;
йВГр = мКоэффициенты.ВГраница();
для й = 0 По йВГр Цикл
текНаборКоэффициентов = мКоэффициенты[й];
ДлинаНабора = текНаборКоэффициентов.ВГраница();

КонтрольнаяСумма = 0;
Для ИндексНабора = 0 По ДлинаНабора Цикл
КонтрольнаяСумма = КонтрольнаяСумма + Число(ИНН[ИндексНабора]) * Число(текНаборКоэффициентов[ИндексНабора]);
КонецЦикла;
КонтрольнаяСумма = (КонтрольнаяСумма % 11) % 10;//получаем остаток деления на 11; и первый разряд числа (единицы)

ИндексКонтрольногоЧисла = ДлинаИНН - (1 + йВГр - й);
КонтрольноеЧисло = Число(ИНН[ИндексКонтрольногоЧисла]);

Если КонтрольнаяСумма <> КонтрольноеЧисло Тогда
фРезультатОК = ложь;
ОписаниеОшибки = СтрШаблон("Невалидный ИНН (%1 <> %2)[%3]", КонтрольноеЧисло, КонтрольнаяСумма, (ИндексКонтрольногоЧисла  + 1));
Прервать;
КонецЕсли;
КонецЦикла;

КонецЕсли;

Возврат фРезультатОК;

КонецФункции
Jgd
06.02.2020 04:38Комментарий: 1
Jgd

валидаторы онлайн выдают корректный результат, а здесь нет

Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.