gifts2017

Проверка ИНН v.7.7

Опубликовал kras_71 (kras_71) в раздел Программирование - Практика программирования

Проверка ИНН v.7.7

Конечно же для кого то это и "баян", но я поискал и для себя не нашел решения.

Может кому то пригодиться.

Проверка ИНН, есть наверняка куча аналогов, для v.8.x точно есть и не один.

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

См. также

Автор запретил комментарии