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