Страницы: 1
RSS
Макрос проверки правильности ввода СНИЛС в textbox
 
Здравствуйте товарищи.
Помогите реализовать на VBA Exel 2010 алгоритм проверки СНИЛС при вводе номера снилс в textbox на userForm, выделить красным если неправильный СНИЛС (т.е. контрольное значение не соответствует номеру) и в этом случае вывести сообщение "Проверьте правильность ввода СНИЛС"
Алгоритм проверки контрольного числа КАРТОЧКИ ПЕНСИОННОГО СТРАХОВАНИЯ:
Номер карточки пенсионного страхования (он же СНИЛС) проверяется на валидность контрольным числом. СНИЛС имеет вид: «XXX-XXX-XXX YY», где XXX—XXX-XXX — собственно номер, а YY — контрольное число.
Проверка контрольного числа Страхового номера проводится только для номеров больше номера 001—001-998
Контрольное число СНИЛС рассчитывается следующим образом:
1. Каждая цифра СНИЛС умножается на номер своей позиции (позиции отсчитываются с конца)
2. Полученные произведения суммируются
3. Если сумма меньше 100, то контрольное число равно самой сумме
4. Если сумма равна 100 или 101, то контрольное число равно 00
5. Если сумма больше 101, то сумма делится нацело на 101 и контрольное число определяется остатком от деления аналогично пунктам 3 и 4.
Конкретные примеры:
Указан СНИЛС 112-233-445 95
Проверяем правильность контрольного числа:
цифры номера 1 1 2 2 3 3 4 4 5
номер позиции 9 8 7 6 5 4 3 2 1
Сумма = 1х9 + 1х8 + 2х7 + 2х6 + 3х5 + 3х4 + 4х3 + 4х2 + 5х1 = 95
95 / !101! =95
Контрольное число 95 - указано верно.
 
Были подобные темы , в поиск: проверка ИНН
 
Цитата
Kuzmich написал: Были подобные темы , в поиск: проверка ИНН
Не то. Хотя все равно немного пригодилось для другого, прикрутил выдачу ошибки при вводе нецифр и пробела в ИНН и СНИЛС. Проверку СНИЛС не нашел поиском
 
Доброе время суток
И что у вас не получается? Можно посмотреть?
 
Прикладываю файл примера, что хочется получить и снимок
 
Я бы регулярками проверял ввод в Texbox1 с шаблоном "^(\d{3})-?(\d{3})-?(\d{3})$" проверял бы правильность ввода первых 9 цифр - сразу бы получал в SubMatches три числа из трёх цифр. Для Texbox2 шаблоном "^\d{2}$" проверял ввод двух цифр. Далее по вашим пунктам выбирал бы, используя Mid, очередную цифру из SubMatches с конца, находил бы требуемую сумму, а затем бы сравнивал с числом в Textbox2. Если всё правильно, соединял бы числовые подстроки в одну строку и преобразовывал в число с записью в ячейку. Если, нет то сообщение и фокус ввода на Textbox1.
Как-то так.
 
кнопка цитирования не для ответа [МОДЕРАТОР]

Проблема в том, что я только начинаю методом тыка использовать макросы и формы, поэтому сам так не обработаю. Мне бы код для этого примера в textbox, допилю сам
Изменено: dixus - 16.12.2015 14:18:35
 
Доброе время суток
Цитата
dixus написал:
Мне бы код для этого примера в textbox, допилю сам
Честно говоря, ничего интересного не вижу в написании подобного кода - только затраты своего времени. Может кому-то будет и интересно, подождите.
 
Цитата
dixus написал: Мне бы код ... допилю сам
ищите по форуму примеры CreateObject("VBScript.RegExp") - для работы с регулярными выражениями...
совсем подробно здесь - Объект RegExp
Изменено: JeyCi - 17.12.2015 11:05:27
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
решение без всякого ВБА: тупо через условную подсветку, при заполненном поля класс - тестирует остальные поля, в том числе и подсвечивает СНИЛС, если он не соответствует формату ХХХХХХХХХХХ, где каждый Х - это обязательная цифра (обязательность возможных лидирующих нулей гарантирует только текстовый формат), и где последние 2 цифры расчитываются методом нахождения контрольных сумм для СНИЛС.
работает во всяких отечественных ПО(которые импортозамещение вместо офиса) так как клоны не поддерживают ВБА. В самом МС excel разумеется тоже это работает.
 
Цитата
ProMiNick написал:
через условную подсветку
Это Вы так называете Условное форматирование? ))
 
Похоже на то?
Изменено: GRIM - 06.12.2019 21:55:41
Страницы: 1
Наверх