Функция ИННПравильный(ИНН) Перем ДлинаКода, ДлинаПроверки; ЕстьОшибкаВКоде=Ложь; ИНН = СокрЛП(ИНН); Если СтрДлина(ИНН)<>10 И СтрДлина(ИНН)<>9 И СтрДлина(ИНН)<>12 Тогда #Если Клиент Тогда Сообщить("Не соответствует длина кода ИНН", СтатусСообщения.Важное); #КонецЕсли Возврат Ложь; КонецЕсли; Если СтрДлина(ИНН)=10 Тогда ДлинаПроверки = Число(Left(ИНН, 1)) * -1 +Число(Сред(ИНН, 2, 1)) * 5 + Число(Сред(ИНН, 3, 1)) * 7 + Число(Сред(ИНН, 4, 1)) * 9 +Число(Сред(ИНН, 5, 1)) * 4 +Число(Сред(ИНН, 6, 1)) * 6 +Число(Сред(ИНН, 7, 1)) * 10 +Число(Сред(ИНН, 8, 1)) * 5 + Число(Сред(ИНН, 9, 1)) * 7; ДлинаКода = ДлинаПроверки-Цел(ДлинаПроверки/11)*11; Если ДлинаКода=10 Тогда ДлинаКода = 0; КонецЕсли; Если Число(Прав(ИНН,1))=ДлинаКода Тогда ЕстьОшибкаВКоде = Ложь; Иначе ЕстьОшибкаВКоде = Истина; КонецЕсли; ИначеЕсли СтрДлина(ИНН)=12 Тогда ДлинаПроверки = Число(Лев(ИНН, 1)) * 11 + Число(Сред(ИНН, 2, 1)) * 13 + Число(Сред(ИНН, 3, 1)) * 17 + Число(Сред(ИНН, 4, 1)) * 19 + Число(Сред(ИНН, 5, 1)) * 23 + Число(Сред(ИНН, 6, 1)) * 29 + Число(Сред(ИНН, 7, 1)) * 31 + Число(Сред(ИНН, 8, 1)) * 37 + Число(Сред(ИНН, 9, 1)) * 41 + Число(Сред(ИНН, 10, 1)) * 43 + Число(Сред(ИНН, 11, 1)) * 47; ДлинаКода = ДлинаПроверки-Цел(ДлинаПроверки/11)*11; Если ДлинаКода = 10 Тогда ДлинаПроверки = Число(Лев(ИНН, 1)) * 13 + Число(Сред(ИНН, 2, 1)) * 17 + Число(Сред(ИНН, 3, 1)) * 19 + Число(Сред(ИНН, 4, 1)) * 23 + Число(Сред(ИНН, 5, 1)) * 29 + Число(Сред(ИНН, 6, 1)) * 31 + Число(Сред(ИНН, 7, 1)) * 37 + Число(Сред(ИНН, 8, 1)) * 41 + Число(Сред(ИНН, 9, 1)) * 43 + Число(Сред(ИНН, 10, 1)) * 47 + Число(Сред(ИНН, 11, 1)) * 53; ДлинаКода = ДлинаПроверки-Цел(ДлинаПроверки/11)*11; Если ДлинаКода=10 Тогда ДлинаКода = 0; КонецЕсли; КонецЕсли; Если Число(Прав(ИНН,1))=ДлинаКода Тогда ЕстьОшибкаВКоде = Ложь; Иначе ЕстьОшибкаВКоде = Истина; КонецЕсли; Иначе ДлинаПроверки = Число(Лев(ИНН, 1)) * 9 + Число(Сред(ИНН, 2, 1)) * 11 + Число(Сред(ИНН, 3, 1)) * 13 + Число(Сред(ИНН, 4, 1)) * 17 + Число(Сред(ИНН, 5, 1)) * 19 + Число(Сред(ИНН, 6, 1)) * 23 + Число(Сред(ИНН, 7, 1)) * 29 + Число(Сред(ИНН, 8, 1)) * 31; ДлинаКода = ДлинаПроверки-Цел(ДлинаПроверки/11)*11; Если ДлинаКода=10 Тогда ДлинаПроверки = Число(Лев(ИНН, 1)) * 11 + Число(Сред(ИНН, 2, 1)) * 13 + Число(Сред(ИНН, 3, 1)) * 17 + Число(Сред(ИНН, 4, 1)) * 19 + Число(Сред(ИНН, 5, 1)) * 23 + Число(Сред(ИНН, 6, 1)) * 29 + Число(Сред(ИНН, 7, 1)) * 31 + Число(Сред(ИНН, 8, 1)) * 37; ДлинаКода = ДлинаПроверки-Цел(ДлинаПроверки/11)*11; Если ДлинаКода=10 Тогда ДлинаКода = 0; КонецЕсли; Если Число(Прав(ИНН,1))=ДлинаКода Тогда ЕстьОшибкаВКоде = Ложь; Иначе ЕстьОшибкаВКоде = Истина; КонецЕсли; Иначе ЕстьОшибкаВКоде = Истина; КонецЕсли; КонецЕсли; Если ЕстьОшибкаВКоде Тогда #Если Клиент Тогда Сообщить("Ошибка в коде ИНН", СтатусСообщения.Важное); #КонецЕсли КонецЕсли; Возврат Не ЕстьОшибкаВКоде; КонецФункции Процедура КнопкаВыполнитьНажатие(Кнопка) Сообщить(ИННПравильный("323752326504")); КонецПроцедуры
ИначеЕсли СтрДлина(ИНН)=12 Тогда
n12 = ((n1*11+ n2*13 + n3*17 + n4*19 + n5*23 + n6*29 + n7*31 + n8*37 + n9*41 + n10*43 + n11*47) % 11) % 10; Если n12 = 0 Тогда n12 = ((n1*13 + n2*17 + n3*19 + n4*23 + n5*29 + n6*31 + n7*37 + n8*41 + n9*43 + n10*47 + n11*53) % 11) %10; КонецЕсли;
n11 = ((n1*9 + n2*11 + n3*13 + n4*17 + n5*19 + n6*23 + n7*29 + n8*31 + n9*37 + n10*41) % 11) % 10; Если n11 = 0 Тогда n12 = ((n1*17 + n2*19 + n3*23 + n4*29 + n5*31 + n6*37 + n7*41 + n8*43 + n9*47 + n10*53) % 11) %10; КонецЕсли;
Функция ИННПравильный(ИНН) ИНН = СокрЛП(ИНН); Если СтрДлина(ИНН)<>10 И СтрДлина(ИНН)<>9 И СтрДлина(ИНН)<>12 Тогда #Если Клиент Тогда Сообщить("Не соответствует длина кода ИНН", СтатусСообщения.Важное); #КонецЕсли Возврат Ложь; КонецЕсли; //// 9 11 13 17 19 23 29 31 37 41 43 47 53 //// n1 = Число(Сред(ИНН, 1, 1)); n2 = Число(Сред(ИНН, 2, 1)); n3 = Число(Сред(ИНН, 3, 1)); n4 = Число(Сред(ИНН, 4, 1)); n5 = Число(Сред(ИНН, 5, 1)); n6 = Число(Сред(ИНН, 6, 1)); n7 = Число(Сред(ИНН, 7, 1)); n8 = Число(Сред(ИНН, 8, 1)); n9 = Число(Сред(ИНН, 9, 1)); Если СтрДлина(ИНН) > 9 Тогда n10 = Число(Сред(ИНН, 10, 1)); КонецЕсли; Если СтрДлина(ИНН) > 10 Тогда n11 = Число(Сред(ИНН, 11, 1)); n12 = Число(Сред(ИНН, 12, 1)); КонецЕсли; Если СтрДлина(ИНН) = 9 Тогда Последняя = ((n1*9 + n2*11 + n3*13 + n4*17 + n5*19 + n6*23 + n7*29 + n8*31) % 11) % 10; Если Последняя = 0 Тогда Последняя = ((n1*11 + n2*13 + n3*17 + n4*19 + n5*23 + n6*29 + n7*31 + n8*37) % 11) % 10; КонецЕсли; ЕстьОшибкаВКоде = Последняя <> n9; ИначеЕсли СтрДлина(ИНН) = 12 Тогда Последняя = ((n1*11+ n2*13 + n3*17 + n4*19 + n5*23 + n6*29 + n7*31 + n8*37 + n9*41 + n10*43 + n11*47) % 11) % 10; Если Последняя = 0 Тогда Последняя = ((n1*13 + n2*17 + n3*19 + n4*23 + n5*29 + n6*31 + n7*37 + n8*41 + n9*43 + n10*47 + n11*53) % 11) %10; КонецЕсли; Предпоследняя = ((n1*9 + n2*11 + n3*13 + n4*17 + n5*19 + n6*23 + n7*29 + n8*31 + n9*37 + n10*41) % 11) % 10; Если Предпоследняя = 0 Тогда Последняя = ((n1*17 + n2*19 + n3*23 + n4*29 + n5*31 + n6*37 + n7*41 + n8*43 + n9*47 + n10*53) % 11) %10; КонецЕсли; ЕстьОшибкаВКоде = Последняя <> n12; ИначеЕсли СтрДлина(ИНН) = 10 Тогда Последняя = ((n1*(-1) + n2*5 + n3*7 + n4*9 + n5*4 + n6*6 + n7*10 + n8*5 + n9*7) % 11) % 10; ЕстьОшибкаВКоде = Последняя <> n10; КонецЕсли; Если ЕстьОшибкаВКоде Тогда #Если Клиент Тогда Сообщить("Ошибка в коде ИНН", СтатусСообщения.Важное); #КонецЕсли КонецЕсли; Возврат Не ЕстьОшибкаВКоде; КонецФункции
Функция ИННПравильный(ИНН) ИНН = СокрЛП(ИНН); Если СтрДлина(ИНН)<>10 И СтрДлина(ИНН)<>9 И СтрДлина(ИНН)<>12 Тогда #Если Клиент Тогда Сообщить("Не соответствует длина кода ИНН", СтатусСообщения.Важное); #КонецЕсли Возврат Ложь; КонецЕсли; //// 9 11 13 17 19 23 29 31 37 41 43 47 53 59 //// n1 = Число(Сред(ИНН, 1, 1)); n2 = Число(Сред(ИНН, 2, 1)); n3 = Число(Сред(ИНН, 3, 1)); n4 = Число(Сред(ИНН, 4, 1)); n5 = Число(Сред(ИНН, 5, 1)); n6 = Число(Сред(ИНН, 6, 1)); n7 = Число(Сред(ИНН, 7, 1)); n8 = Число(Сред(ИНН, 8, 1)); n9 = Число(Сред(ИНН, 9, 1)); Если СтрДлина(ИНН) > 9 Тогда n10 = Число(Сред(ИНН, 10, 1)); КонецЕсли; Если СтрДлина(ИНН) > 10 Тогда n11 = Число(Сред(ИНН, 11, 1)); n12 = Число(Сред(ИНН, 12, 1)); КонецЕсли; Если СтрДлина(ИНН) = 9 Тогда Последняя = ((n1*9 + n2*11 + n3*13 + n4*17 + n5*19 + n6*23 + n7*29 + n8*31) % 11) % 10; Если Последняя = 0 Тогда Последняя = ((n1*11 + n2*13 + n3*17 + n4*19 + n5*23 + n6*29 + n7*31 + n8*37) % 11) % 10; КонецЕсли; ЕстьОшибкаВКоде = Последняя <> n9; ИначеЕсли СтрДлина(ИНН) = 12 Тогда Последняя = ((n1*11+ n2*13 + n3*17 + n4*19 + n5*23 + n6*29 + n7*31 + n8*37 + n9*41 + n10*43 + n11*47) % 11) % 10; Если Последняя = 0 Тогда Последняя = ((n1*17 + n2*19 + n3*23 + n4*29 + n5*31 + n6*37 + n7*41 + n8*43 + n9*47 + n10*53 + n11*59) % 11) %10; КонецЕсли; Предпоследняя = ((n1*9 + n2*11 + n3*13 + n4*17 + n5*19 + n6*23 + n7*29 + n8*31 + n9*37 + n10*41) % 11) % 10; ЕстьОшибкаВКоде = Последняя <> n12 ИЛИ Предпоследняя <> n11; ИначеЕсли СтрДлина(ИНН) = 10 Тогда Последняя = ((n1*(-1) + n2*5 + n3*7 + n4*9 + n5*4 + n6*6 + n7*10 + n8*5 + n9*7) % 11) % 10; ЕстьОшибкаВКоде = Последняя <> n10; КонецЕсли; Если ЕстьОшибкаВКоде Тогда #Если Клиент Тогда Сообщить("Ошибка в коде ИНН", СтатусСообщения.Важное); #КонецЕсли КонецЕсли; Возврат Не ЕстьОшибкаВКоде; КонецФункции