Функция ИННПравильный(ИНН)
Перем ДлинаКода, ДлинаПроверки;
ЕстьОшибкаВКоде=Ложь;
ИНН = СокрЛП(ИНН);
Если СтрДлина(ИНН)<>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;
КонецЕсли;
Если ЕстьОшибкаВКоде Тогда
#Если Клиент Тогда
Сообщить("Ошибка в коде ИНН", СтатусСообщения.Важное);
#КонецЕсли
КонецЕсли;
Возврат Не ЕстьОшибкаВКоде;
КонецФункции