Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проверка украинский ИНН
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование управляемых форм 1С 8.2
sqr4
Не могу понять как контролировать ввод для украинских ИНН.
Перем ДлинаКода, ДлинаПроверки;
        ЕстьОшибкаВКоде=Ложь;
        
        ИНН = СокрЛП(ИНН);
        Если СтрДлина(ИНН)<>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
Petre
необходимо зарегистрироваться для просмотра ссылки
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.