TLDR:

Всё плохо.

Преамбула:

На статью вдохновил ряд предыдущих заблуждений программистов о почтовых адресах, времени и именах.

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

Кат с философским описанием.

В жизни некоторых программистов наступает момент, когда им ставится задача «Написать модуль работы с персональными данными пользователей». Причём, по традиции, желательно «ещё вчера». Задача на вид несложная, за пару часов до дедлайна программист нажимает кнопку «Деплой» и уходит на законные выходные. Утром в субботу телефон пиликает сообщением о новом письме: техподдержка открывает тикет «Настырный пользователь не может пройти регистрацию». Грустно вздохнув и отложив в сторону билеты на хоккей, программист проверяет полученные данные и садится за ноутбук. Так в проекте появляется первый костыль…

Описанное выше, конечно же, происходит в параллельной вселенной, было 20 лет назад и вообще, сейчас полный Agile. Но вдруг какой‑то из примеров будет вам полезен.

Заметили, что и в 2263 году всё ещё используются физические документы для идентификации?
Заметили, что и в 2263 году всё ещё используются физические документы для идентификации?
  1. Документ удостоверяющий личность только паспорт.

    В законодательстве разных стран предусмотрен различный набор документов, по которым может быть идентифицирован человек: в Российской Федерации это паспорт гражданина, дипломатический паспорт, служебный паспорт, военный билет, временное удостоверение личности, удостоверение личности моряка и тд. Отказ в предоставлении услуг при непредоставлении паспорта может расцениваться как жестокое нарушение Конституционных прав пользователя.

    Если ваш софт планирует пересечь наземные границы и будет использоваться в других странах, дополнительно запланируйте широкий ассортимент поддерживаемых документов: ID‑карта (Узбекистан, Казахстан, Армения), водительское удостоверение (Узбекистан), удостоверение беженца (Казахстан), свидетельство на возвращение (Казахстан, Армения).

    Если в вашем софте ожидается регистрация иностранцев, сюда же добавляются загранпаспорта по стандарту ICAO. Причём, если чётко следовать букве законодательства, загранпаспорта являются документами удостоверяющими личность гражданина, находящегося за пределами родины.

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

  2. Серия и номер паспорта в базе всегда уникальны.

    Первый попавшийся пример: если судить по картинкам в интернете, паспорт с серией‑номером вида «8 цифр» может быть и у гражданина Израиля, и у гражданина Чехии. Соответственно, можно ожидать коллизий в случае использования системы гражданами обеих стран.

    Если добавить возможность регистрации по иным документам, удостоверяющим личность, и включить поддержку старых (предыдущих) версий документов, проблемы дублирования в базе гарантированы.

  3. У документов всегда последовательный номер, если есть паспорт c номером AB1234567, где-то есть паспорт с номером AB1234568.

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

    «Красивый» номер вида «шесть семёрок» может быть сгенерирован разово по просьбе, высказанной с должным уважением и его «соседи» появятся лет через 5.

  4. Серия и номер документа всегда соответствует требованиям (шаблону).

    Паспортизация — важный элемент любого государства, поэтому с практически 100% вероятностью так и будет. «Но есть нюанс» ©: «шаблон» для серии и номера документа различен. Серия и номер паспорта Российской Федерации состоит из 10 цифр, паспорта Камеруна — из 7. В Беларуси первыми идут две латинские буквы (обозначение региона), в Узбекистане серия состоит из латинских букв, которые последовательно увеличиваются при достижении всех девяток в номере: AA, AB, AC. Сюда же добавим поддержку иных видов документов (удостоверение моряка, водительское удостоверение).

  5. Серия и номер паспорта всегда написаны правильно.

    При интеграции систем или обогащении данных могут возникнуть ошибки, когда введённые вручную «...адцать лет назад» данные некорректны. И если с ошибками вида «буквы на кириллице вместо латиницы», «лишние пробелы» ETL системы справляются достаточно хорошо, то недостающие или лишние цифры‑буквы становятся большой проблемой. Решение остаётся на получателе данных: принимать некорректные данные в надежде когда‑нибудь их исправить или игнорировать, уменьшая реальное количество записей.

    Знакомые рассказывали, что в одном кейсе интеграции систем «мусорными« были 60% данных.

  6. Дата выдачи паспорта всегда в прошлом.

    Если не рассматривать человеческий фактор и вариант «наша система работает в виртуальной машине, на которой сбилась дата», можно предположить теоретическую ситуацию «Человек получает загранпаспорт на Чукотке и сразу пересекает Берингов пролив на Аляску с паспортом, выданным Завтра».

  7. У паспорта всегда есть срок действия.

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

  8. Дата рождения всегда валидна.

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

    Стандарт ИКАО позволяет заменять «иксами» недостающие части дат. Автор лично встречал в строке «Дата рождения» значения «00.00.1940» и «ХХ.ХХ.1965». Сумеет ли ваша программа грамотно их распарсить и записать в базу? Большой вопрос.

Приятно познакомиться, Лилу из будущего
Приятно познакомиться, Лилу из будущего
  1. Дата рождения всегда в прошлом.

    Частный случай пункта 8 — если неизвестен даже год рождения, могут быть выставлены любые значения, стандартные для данного софта. В одной крупной программе встречал значение по умолчанию для года рождения 9999. При этом в самой программе предусмотрена обработка подобных событий. Но если данные начинают передаваться в другую систему, может возникнуть интересный казус.

  2. Пол пользователя не может измениться в процессе использования данных.

    Может.

    10.1. ОК, пол не может измениться в странах, где такое запрещено законодательством.

    Крайне редкие медицинские случаи: родился ребёнок с признаками обоих полов. При первой персонализации родители записали ребёнка девочкой (например). Ближе к половому созреванию визуально стали больше проявляться признаки мужского пола. В таких случаях пол будет изменён.

    10.2. Пол всегда определён.

    Если рождается ребёнок с признаками обоих полов и погибает до первой персонализации, в медицинском софте его пол может быть указан как «неизвестный».

  3. В официальном документе, удостоверяющем личность, всегда актуальная информация.

    Простой пример: девушка вышла замуж, сменила фамилию и поменяла паспорт. Затем на основании нового паспорта она поменяла водительское удостоверение. В промежутке между этими событиями у неё два актуальных документа, подтверждающих личность, выданных на разные фамилии.

  4. Документ, удостоверяющий личность, всегда является актуальным.

    Выдуманный пример из банковской сферы: в понедельник гражданин З. подаёт заявление об утере паспорта, платит штраф. Во вторник гражданин З. приходит в банк и берёт кредит на «утерянный паспорт».

    И начинается долгая судебная история, в ходе которой гражданин З. утверждает, что никакого кредита он не брал, а это всё мошенники, которые пытаются опорочить его честное имя.

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

  5. В момент использования софта пользователь жив.

    Кто-то может воспользоваться чужой учётной записью и после смерти владельца учётки.

    Кто-то из родственников/друзей может попытаться вывести деньги с пластиковой карты усопшего через системы интернет-банкинга.

    Кто-то должен получить результаты выполнения «долгоиграющих» заявок пользователя и после его смерти.

    В центральных базах может быть ошибочно отмечено, что пользователь покинул наш бренный мир, соответственно пользователь не может получить банковские или иные услуги. Можно даже провести конкурс на самое лучшее сообщение пользователю о том, что он не может получить желаемый доступ по причине того, что мы считаем его мёртвым. Мой фаворит: «Zombies are not allowed in our system».

  6. У пользователя всегда есть валидное гражданство.

    Лица без гражданства передают большой и пламенный привет.

  7. У пользователя всегда есть валидное гражданство или отметка ЛБГ.

    После распада СССР был достаточно большой промежуток времени, в течение которого жители могли поменять свой паспорт на паспорт нового государства. То есть в тот момент это были граждане несуществующей страны.

    И даже после истечения сроков замены представители старшего поколения (особенно в отдалённых деревеньках) не спешили принять гражданство той или иной страны.
    Другой пример из современности: Республика Косово отсутствует в списке государств ISO-3166, но на практике коды KS и RKS используются.

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

  8. Всегда есть валидное место рождения.

    В дополнение к предыдущему пункту: место рождения может быть не валидным в текущий момент: населённый пункт переименован, упразднён.

Исключительно чтобы не плодить лонгриды, на этом предлагаю остановиться. В других статьях продолжу про типичные заблуждения, связанные с ФИО и идентификаторами пользователей.

Комментарии (34)


  1. v1000
    02.02.2023 08:09
    +6

    В банк пришел клиент, которому 101 год. Банковская система стандартно отбросила «лишние» 100 лет, и не дала открыть счет несовершеннолетнему клиенту.


    1. Germanjon Автор
      02.02.2023 08:36

      Банковская система не смогла обработать трёхзначный возраст? Эта старый кейс?


      1. v1000
        02.02.2023 09:08
        +2

        ну не настолько давно :) там вроде прикол был в том, что возраст вычислялся автоматически на основе персонального кода, в котором только две цифры года рождения. поэтому родившиеся в 1910 и 2010 году могли быть одного возраста.


        1. Germanjon Автор
          02.02.2023 09:12

          Последний раз встречал такое во времена DOS-а, потом вроде бы перестали экономить и стали хранить данные об юзере в формате DateTime. Возможно - сработал человеческий фактор?

          Иначе это большой косяк банковской программы.


          1. Iscander_Che
            02.02.2023 09:32
            +3

            Вполне возможно, что банковская программа работает ещё на DOSе. На Хабре достаточно про незаменимый софт и железо написано.


          1. v1000
            02.02.2023 10:39

            прикол не про хранение данных - возраст вычислялся неправильно. и выдавал ошибку при попытке ввода данных.

            большой косяк банковской программы

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


  1. sunnybear
    02.02.2023 08:30

    В РФ по решению Верховного суда N ГКПИ06-1016 от 8 ноября 2006 года водительское удостоверение содержит все необходимые реквизиты, которые позволяют удостоверить гражданина и его личность.


    1. Germanjon Автор
      02.02.2023 08:32

      А на практике можно ли получить полный спектр государственных/частных услуг без предъявления паспорта, а при помощи водительского удостоверения?


    1. vadimr
      02.02.2023 08:44
      +4

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

      Там фабула рассматриваемого дела была совсем другая, истец безуспешно пытался отменить приказ МВД.

      А некоторые поверхностные журналисты сделали далеко идущие неверные выводы.

      Список документов, удостоверяющих личность гражданина РФ, установлен указом Президента, там в целом юридически всё прозрачно. Но, как верно заметил автор статьи, на практике встречаются частности. Прежде всего потому, что никто не гарантирует, что заполнение базы было выполнено с полным соблюдением требований законодательства.


      1. sunnybear
        02.02.2023 09:16

        Вариантов удостоверения личности по водительскому немного больше, чем просто проверка ГИБДД. Но есть определённые проблемы с получением ряда услуг по нему. Поэтому, де-юро, водительское можно предъявлять, но де-факто гарантии оказания услуг по нему нет.


        1. vadimr
          02.02.2023 10:14
          +3

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

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


    1. vadim_bv
      02.02.2023 16:04

      Если говорить про банки, то водительское удостоверение документом, удостоверяющим личность, не является. См примечание на странице www.cbr.ru/ckki/ckki_list
      Я делал несколько систем для всяких ПОД/ФТ и БКИ, там в списке ДУЛов его нет.


  1. ValeryGL
    02.02.2023 08:39
    +3

    Прекрасное. Минимум шестнадцать раз рука поднималась написать комментарий "а у меня был похожий случай..." :))

    Подписался, жду продолжения про имена


  1. Markscheider
    02.02.2023 09:11
    +3

    проверять в центральных базах статус документа.

    Про гражданина З.

    А вы уверены, что прямо на следующий день после подачи в МВД заявления об утрате паспорта, его статус в центральных базах изменится?


    1. Germanjon Автор
      02.02.2023 09:23

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


      1. Markscheider
        02.02.2023 10:29

        с точки зрения МВД, гражданин может на следующий день благополучно найти свой паспорт

        Вот тут не уверен. Вроде бы, с момента подачи заявления об утере "фарш нельзя провернуть обратно". То есть паспорт найти, конечно, можно, но он уже будет считаться недействительным. И это не потому, что МВД так быстро его добавит в базу :), а потому, что есть процессы, бюрократия и "делу обратный ход дать нельзя". Ну или можно - по договоренности...


        1. Germanjon Автор
          02.02.2023 10:49
          +1

          Либо предусмотреть в базе дополнительные статусы для паспорта: аннулирован, аннулирован в связи со смертью, утерян но пока не аннулирован... Но это труднее


        1. vadim_bv
          02.02.2023 16:05

          МВД добавит в базу, базы синхронизируются с центральной, потом банк синхронизируется с этой… Вполне несколько дней может пройти, даже если на всякие сбои не закладываться


          1. Germanjon Автор
            02.02.2023 16:11

            Получается, в период между тем как пользователь официально "потерял" паспорт и до того, как об этом узнает конечный потребитель (банк), юридически этот паспорт недействителен, но по факту будет приниматься?


            1. vadim_bv
              02.02.2023 16:15
              +1

              Ну вот по факту я ХЗ. Могу только рассуждать. Отправила операционистка запрос, а в ответ ей что придет? Скорей всего придет «ОК».

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


    1. Evengard
      02.02.2023 11:49

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


      1. Germanjon Автор
        02.02.2023 13:14

        Сильно зависит от законодательства той или иной страны. По идее, должна быть интеграция госсистем с центральными БД через тот же СМЭВ.
        Как на деле всё обстоит? Не знаю


      1. Aleshonne
        02.02.2023 21:45

        Список недействительных паспортов вполне может быть размещён открыто. Например: http://services.fms.gov.ru/info-service.htm?sid=2000. Скачиваете файлик и проверяете паспорта локально или же пользуетесь сайтом.

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


    1. shifted83
      02.02.2023 12:19
      +1

      Не уверен, как оно в ситуации с паспортом, но вот военный билет я однажды терял. Лежал он на полке в шкафу около года, а как понадобился - нет его. Пришел в военкомат, сообщил о потере, мне прочитали краткую лекцию на тему важности этого документа и разгильдяйства (как вообще, так и моего конкретно). Потом дали бегунок с "мероприятиями". Мероприятия по поиску заключались в том, что надо было удостовериться, что никто не приносил мой военный билет в отдел полиции каждого микрорайона моего города. Дома при более тщательном поиске билет нашелся, о чем я сообщил в военкомат на следующий день. Мне коротко сказали: "Тогда заявление выкидываем, до свидания".

      Скорее всего, с паспортом тоже есть стандартная процедура с подобными "мероприятиями".


      1. eurol
        02.02.2023 13:32
        +1

        Важность военника и разгильдяйства - звучит забавно.


  1. boopiz
    02.02.2023 13:22

    имхо. это типичные частные кейсы, которые не "рушат" систему. и типичное заблуждение. любой программер будет делать что то по уьвержденному ТЗ с утвержденным атрибутивным срставом, который появляется после изучения законодательства и объективной реальности. и при этом, предусматривпется возможное расширение функционала за счет гиькости семантики. если в вашей системе это не так, то это проблемы конкретно вашей системы. основное правило одно - все меняется и все изменения должны хранится до конца жизни системы.


    1. Germanjon Автор
      02.02.2023 14:15
      +1

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

      Всё это действительно должно формироваться на этапе ТЗ (привет аналитикам) и проверяться на этапе тестов.


  1. speshuric
    02.02.2023 15:03
    +3

    Я каждый раз, когда ввожу данные свидетельства о рождении моего первого ребёнка путаюсь. В свидетельствах серия состоит из римских цифр (подмножество латиницы) и кириллицы. И номер цифрами. Но в данном конкретном случае серия "II-ET" - поэтому часто на автомате пишу латинские буквы. Иногда системы не дают ввести маской ввода (это норм), иногда тихо подменяют (не очень норм, но норм), иногда подсвечивают и подменяют (вполне норм). А иногда дают ввести, но потом где-то в использовании данных может возникать ошибка (это прям совсем не норм).


    1. Markscheider
      02.02.2023 23:00
      +2

      Я каждый раз, когда ввожу данные свидетельства о рождении моего первого ребёнка путаюсь.

      Но вы хоть правильно визуально вводите. А есть особая категория граждан, которым лень переключать раскладку.

      Собирали данные свидетельств, чтобы централизованно заказать билеты на поезд. Одни родители присылают: серия, условно, IV-NA. Я в шоке: ну не может такого быть! Звоню, разбираюсь. Оказывается, в оригинале было "IV-ИА", но было лень переключать язык и "И" заменили на похожую по начертанию "N".

      Вот что у людей в головах?


      1. speshuric
        02.02.2023 23:03
        +3

        Вот что у людей в головах?

        Это страшный вопрос и я вообще не уверен, что хочу знать ответ :)


  1. vadimk91
    02.02.2023 18:27
    +1

    45 лет мне было уже много лет назад, но до сих пор аукается замена паспорта по возрасту. Почему в базах не хранится соответствие старого и нового паспорта - для меня загадка, и я (как впрочем и все граждане страны Р) должен до сих пор доказывать, что они тот же самый верблюд, да ещё и с привлечением нотариусов.


    1. vlivyur
      02.02.2023 18:30

      А в паспорте нет отметки о ранее выданных паспортах? У меня и советский там отмечен


      1. vadimk91
        02.02.2023 19:15

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


    1. Germanjon Автор
      03.02.2023 07:37
      +1

      Напрашивается политическое решение по вводу единого идентификатора физлица, к которому уже подвязываются все паспорта и и другие выданные документы.
      Но это огромный объём работ по оцифровке и очистке