Найти в Дзене

Проверка паспорта в Excel без доступа в интернет

Алгоритм позволяет проверить паспорт гражданина РФ на то, действителен он или нет. Вернее проверить просрочен он или нет. Формула для проверки была написана на коленке, пока ехал в поезде, и на достоверность рекомендую проверить. Мог где-нибудь допустить ошибку. Данные в примерах не являются чьими-либо персональными данными и любые совпадения имен, паспортных данных и номеров телефонов, указанных в данной статье и файле по ссылке из статьи, случайны. Для чего и с чего? Не так давно я ездил на форум «ФИЧА» I Всероссийский форум IT-технологий. Во время поездки пришлось столкнуться с рядом проблем. В частности, были несостыковки по данным паспорта. Где-то при покупке билетов были подставлены неверные серия и номер паспорта, а где-то и вовсе не удалось оформить, т.к. в Алтайском крае серия паспорта начинается с 01. Что такого? Да просто кто-то в БД указал тип числовой и все паспорта с серией, начинающиеся на 0, стали на одну цифру короче (оригинал: 0123 456789, стало 123456789). А при даль
Оглавление

Алгоритм позволяет проверить паспорт гражданина РФ на то, действителен он или нет. Вернее проверить просрочен он или нет.

Формула для проверки была написана на коленке, пока ехал в поезде, и на достоверность рекомендую проверить. Мог где-нибудь допустить ошибку.

Данные в примерах не являются чьими-либо персональными данными и любые совпадения имен, паспортных данных и номеров телефонов, указанных в данной статье и файле по ссылке из статьи, случайны.

Паспорт РФ. Источник: Яндекс.Картинки
Паспорт РФ. Источник: Яндекс.Картинки

Для чего и с чего?

Не так давно я ездил на форум «ФИЧА» I Всероссийский форум IT-технологий. Во время поездки пришлось столкнуться с рядом проблем. В частности, были несостыковки по данным паспорта.

Где-то при покупке билетов были подставлены неверные серия и номер паспорта, а где-то и вовсе не удалось оформить, т.к. в Алтайском крае серия паспорта начинается с 01. Что такого? Да просто кто-то в БД указал тип числовой и все паспорта с серией, начинающиеся на 0, стали на одну цифру короче (оригинал: 0123 456789, стало 123456789). А при дальнейшей обработке системы не могли обработать паспорта с 9 цифрами, вместо 10. Операторы звонили и мягко уточняли первую цифру серии. Ну это ладно.

Другой бедой стало то, что произошел какой-то сбой и у некоторых участников форума в системе были прописаны данные не то старых паспортов, не то просто левых цифр. В итоге были получены недействительные билеты и, как следствие, позднее их переоформляли. Но самое обидное, что вылезшие из старых БД данные паспорта можно было обнаружить и предотвратить проблемы с перерегистрацией и переоформлением билетов.

Большая часть ошибок в данных была именно в серии и номере паспортов. Они были явно просроченными. Так, например, серия и номер моего паспорта были в системе от прошлого, который я поменял еще три года назад.

Время было вечером, делать было нечего

Решил убить время, размяв мозги над алгоритмом проверки паспорта на просрочку. Ну и, быть может, помочь тем, кто обрабатывал наши данные, предоставив пример алгоритма, а также, показав, что можно было сэкономить время, нервы и силы обоих сторон. Бонус - проверка без сторонних сервисов, пусть и неточная.

В моих попытках узнать, почему у меня неверные данные, мне скинули скриншот окна из системы с моими данными. Так я узнал, что в системе указаны данные моего старого паспорта, а также подсмотрел порядок полей с данными.

Восстановил порядок полей для примера обработки данных. Получилось следующее:

-2

Дата рождения и серия - наш ключ! Пишем алгоритм

Начнем с даты рождения. Вычислим возраст и когда последний раз был получен паспорт.

Зная текущую дату, мы можем легко посчитать сколько лет владельцу (ячейка K2):

=ДОЛЯГОДА(D2;СЕГОДНЯ();1)

Паспорт получают (меняют) в 14, 18, 20, 45 (гарантированно). От этого будем отталкиваться при вычислении до какого возраста должен действовать прошлый паспорт (ячейка L2):

=ЕСЛИ(K2>45;20;ЕСЛИ(K2>20;18;0))

так же вычисляем дату последнего раза, когда должен был быть заменен паспорт (ячейка M2):

=ДАТАМЕС(D2;L2*12)

Серия паспорта, а вернее её последние две цифры, могут нам указать на год выдачи паспорта (ячейка I2):

=ПСТР(F2;ДЛСТР(F2)-1;ДЛСТР(F2))+1

Используя год выдачи вычисляем дату выдачи паспорта (ячейка J2):

=ДАТА(ЕСЛИ(I2<(ГОД(СЕГОДНЯ())-2000);2000+I2;1900+I2);МЕСЯЦ(D2);ДЕНЬ(D2))

После всех вычислений мы можем сравнить дату выдачи паспорта с минимальной датой выдачи. И, если, минимальная окажется меньше даты выдачи, то можем считать, что паспорт (условно) действующий. Определяем в ячейке N2 по простой формуле:

=M2<J2

В ходе всех вычислений получаем примерно такую картину:

Серым - промежуточные вычисления
Серым - промежуточные вычисления

Уже заметили желтый столбец (H)? В нем собраны все формулы в одну страшную:

=ДАТАМЕС(D2;ЕСЛИ(ДОЛЯГОДА(D2;СЕГОДНЯ();1)>45;20;ЕСЛИ(ДОЛЯГОДА(D2;СЕГОДНЯ();1)>20;18;0))*12)<ДАТА(ЕСЛИ((ПСТР(F2;ДЛСТР(F2)-1;ДЛСТР(F2))+1)<(ГОД(СЕГОДНЯ())-2000);2000+(ПСТР(F2;ДЛСТР(F2)-1;ДЛСТР(F2))+1);1900+(ПСТР(F2;ДЛСТР(F2)-1;ДЛСТР(F2))+1));МЕСЯЦ(D2);ДЕНЬ(D2))

А если без дополнительного столбца? Подсвечиваем!

Для упрощения (уменьшения размера) таблицы и визуального удобства можно выполнять проверку через условное форматирование.

Добавляем условное форматирование столбца по все той же формуле, но с малозаметным изменением, заключающемся в замене "<" на ">=":

=ДАТАМЕС(D2;ЕСЛИ(ДОЛЯГОДА(D2;СЕГОДНЯ();1)>45;20;ЕСЛИ(ДОЛЯГОДА(D2;СЕГОДНЯ();1)>20;18;0))*12)>=ДАТА(ЕСЛИ((ПСТР(F2;ДЛСТР(F2)-1;ДЛСТР(F2))+1)<(ГОД(СЕГОДНЯ())-2000);2000+(ПСТР(F2;ДЛСТР(F2)-1;ДЛСТР(F2))+1);1900+(ПСТР(F2;ДЛСТР(F2)-1;ДЛСТР(F2))+1));МЕСЯЦ(D2);ДЕНЬ(D2))

После применения форматирования к ячейкам столбца получим следующее:

-4

Во второй половине списка дублируются данные, но серия паспорта подобрана так, чтобы не проходить проверку.

Ну а полностью, с "отладочной" (серой) зоной, тестовая таблица выглядит так:

-5

Выводы

Я попытался реализовать алгоритм, как сумел.

Для меня Excel - не мой профиль программирования, потому алгоритм может быть не оптимальным или даже неработоспособным на некоторых версиях офиса.

Какие-то моменты, вероятно, можно было сделать проще и эффективнее.

Да и проверялся алгоритм только на данных моего старого и нового паспорта, потому требует проверки, если его решите использовать вы, мой дорогой читатель.

Если кому-то требуется файл xlsx, то найти его вы сможете на моем сервере.

—————————————————————————

Спасибо, что дочитали статью!

Подпишитесь пожалуйста на мой канал "Заметки Электроника | Alexander.Chad", этим Вы очень сильно поможете мне. Канал существует только за счет наличия и участия подписчиков.

Если Вам понравился материал - поддержите его лайком или даже донатом (ЮMoney). Есть что сказать? Оставьте комментарий! Это тоже будет помощью.

Сейчас канал нуждается в Вас как никогда прежде!