PDA

Просмотр полной версии : Проверка ИНН



ArPlus
09.05.2010, 09:43
Сделано на примере УТ. В модуле формы "ФормаЭлемента" справочника Контрагенты есть функция ПроверитьИНН().
Предлагаю заменить ее на следующую. В данном случае будет проверяться контрольное число.

Если НЕ ЗначениеЗаполнено(ИНН) Тогда
Возврат;
КонецЕсли;

ДлинаИНН = СтрДлина(ИНН);
ТекстСообщения = "";

Если ЮрФизЛицо = Перечисления.ЮрФизЛицо.Физ Лицо Тогда
Если НЕ ДлинаИНН = 12 Тогда
ТекстСообщения = """ИНН"" физического лица 12 символов!";
КонецЕсли;
Иначе
Если НЕ ДлинаИНН = 10 Тогда
ТекстСообщения = """ИНН"" юридического лица 10 символов!";
КонецЕсли;
КонецЕсли;

Множители = Новый Массив(11);
Множители[0] = 3;
Множители[1] = 7;
Множители[2] = 2;
Множители[3] = 4;
Множители[4] = 10;
Множители[5] = 3;
Множители[6] = 5;
Множители[7] = 9;
Множители[8] = 4;
Множители[9] = 6;
Множители[10] = 8;

Результат=Ложь;

Если ДлинаИНН = 10 Тогда
Сум = 0;
Для i=0 По 8 Цикл
Сум = Сум + Сред(ИНН,i+1,1) * Множители[i+2];
КонецЦикла;
Сум = Сум - 11 * Цел(Сум/11);
Сум = Сум - 10 * Цел(Сум/10);
Результат = ?(Число(Сред(ИНН,10,1)) = Сум,Истина,Ложь);
ИначеЕсли ДлинаИНН = 12 Тогда
Сум = 0;
Для i=0 По 9 Цикл
Сум = Сум + Сред(ИНН,i+1,1) * Множители[i+1];
КонецЦикла;
Сум = Сум - 11 * Цел(Сум/11);
Сум = Сум - 10 * Цел(Сум/10);
Сум2 = 0;
Для i=0 По 10 Цикл
Сум2 = Сум2 + Сред(ИНН,i+1,1) * Множители[i];
КонецЦикла;
Сум2 = Сум2 - 11 * Цел(Сум2/11);
Сум2 = Сум2 - 10 * Цел(Сум2/10);
Результат = ?((Число(Сред(ИНН,11,1)) = Сум)И(Число(Сред(ИНН,12,1)) = Сум2),Истина,Ложь);
КонецЕсли;

Если Результат = ложь Тогда
ТекстСообщения = """ИНН"" не совпадают контрольные числа!";
КонецЕсли;
Если ЗначениеЗаполнено(ТекстСо� �бщения) Тогда
ОбщегоНазначения.Сообщить� �бОшибке("Длина ""ИНН"" не соответствует требованиям: " + ТекстСообщения);
КонецЕсли;

reg-aleks
09.05.2010, 16:19
а зачем вообще эта проверка нужна?
у меня клиент ввел инн и очень был шокирован, что программа выдала сообщение, о неправильном инн'e

ArPlus
10.05.2010, 11:40
И что его шокировало? Что Контрагент с которым он намерен работать или работает, мягко говоря, ввел его в заблуждение? ;)

reg-aleks
10.05.2010, 18:53
а в чем же заблуждение? если эта проверка сто процентов может сказать существует ли такой инн или нетИ

ArPlus
11.05.2010, 06:33
О том что НЕ сущесвует точнно на 100%