Если вы хотите найти человека, знающего только эти учетные данные, вы можете сохранить SHA-1 в базе данных (или MD5 для скорости, если у вас нет, как квадриллиона)людей для выборки).
Хеш будет бесполезным, так как не хранит информацию о человеке, но может работать для поиска в базе данных.Вы просто хотите убедиться, что три фрагмента информации совпадают, поэтому было бы безопасно просто объединить их:
user.hash = SHA1(user.firstName + user.DOB + user.lastName)
И когда вы запрашиваете, вы можете проверить, совпадают ли два:
hash = SHA1(query.firstName + query.DOB + query.lastName)
for user in database:
if user.hash == hash:
return user
Я поставил query.DOB
в середину, потому что имя и фамилия могут совпадать, как если бы JohnDoe Bob
родился в тот же день, что и John DoeBob
.Я не знаю числовых имен, поэтому думаю, что это остановит подобные коллизии;)
Но если это большая база данных, я бы попробовал MD5.Это быстрее, но есть вероятность столкновения (в вашем случае я могу гарантировать, что оно не произойдет).Однако вероятность столкновения составляет на самом деле мала.
Чтобы представить это в перспективе, столкновение представляет собой 1 / 2^128
вхождение, которое составляет:
1
---------------------------------------------------
340,282,366,920,938,463,463,374,607,431,768,211,456
И это немного меньше, чем:
0.0000000000000000000000000000000000000293873 %
Я довольно уверен, что вы не получите столкновение;)