Меню

Генератор номеров удостоверений личности по странам

Генератор номеров удостоверений личности создаёт идентификаторы с правильной длиной, структурой и контрольными знаками. Разбираем форматы стран, роль контрольных цифр и границы проверки личности в тестах.

Опубликовано

  • тестовые данные
  • документы
  • разработка

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

Почему один шаблон не подходит для номеров документов?

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

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

Третье — допустимые символы. В большинстве стран это только цифры, но встречаются форматы, где последний знак может быть буквой, а также форматы, где буква стоит в середине. Проверка «только цифры» в таких случаях отсекает корректные значения и одновременно пропускает произвольный набор цифр неверной структуры.

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

Как отличаются форматы в разных странах

В Соединённых Штатах используется номер социального страхования из девяти знаков, разбитых на три группы. Контрольной цифры он не содержит, и проверяется только формат: допустимые длины групп и запрещённые сочетания. Это важный пример: не во всех странах у номера документа есть проверяемая контрольная сумма, и форма, которая её требует, окажется строже реальности.

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

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

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

Какую роль играют контрольные цифры

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

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

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

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

Почему длина должна задаваться по стране?

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

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

Третья проблема — приведение типов. Номер документа не является числом: ведущие нули значимы, а в некоторых странах в записи встречаются буквы. Хранение такого значения в числовом поле приводит к потере первого знака и к ошибкам форматирования. Правильный тип — строка фиксированной или переменной длины, заданной по стране.

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

Что происходит с данными при проверке личности в тестах

Тестовый контур должен оставаться тестовым. Номера документов, которые в нём используются, обязаны быть синтетическими, а процедуры проверки личности — воспроизводиться на вымышленных записях, а не на копиях рабочей базы. Это не формальность: идентификатор вместе с именем и датой рождения однозначно указывает на человека, и утечка тестовой копии становится реальным инцидентом.

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

Третье — формулировки в интерфейсе. Сообщения формы не должны намекать, что данные проходят проверку личности, если речь идёт о проверке формата. Путаница в словах приводит к тому, что и требования начинают формулировать неверно, а вместе с ними и тесты.

Четвёртое — сроки хранения. Даже синтетические записи стоит убирать после прогона, чтобы тестовые окружения не превращались в свалку. А если в них всё же попали реальные значения, их нужно удалять немедленно.

Как собрать набор для проверки формы?

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

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

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

И последнее — зафиксируйте эталонные записи. О том, как совместить стабильные образцы с проверками на разнообразии, подробно рассказано в статье про данные личности для тестирования.

Что делать, если страна не использует контрольную цифру?

Не во всех странах номер документа заканчивается вычисляемым знаком. В Соединённых Штатах номер социального страхования контрольной цифры не содержит, и проверяется только структура: допустимая длина групп и запрещённые сочетания значений. Это меняет подход к тестированию, но не отменяет его.

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

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

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

Четвёртое — формулировки в интерфейсе. Если форма сообщает, что номер недействителен, а на самом деле она проверила только структуру, пользователь получит неверное представление о происходящем. Сообщение должно описывать именно то, что проверено, и не обещать больше.

Границы синтетических номеров

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

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

Что делать дальше

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

Читать дальше

Популярные инструменты и статьи о применении