Интересно, намереваетесь ли вы «назначить» эти идентификаторы пользователям? Если это так, я ожидаю, что ваши пользователи будут ненавидеть все, что вы предлагаете; кто хотел бы получить идентификатор пользователя "AAAAA01"?
Итак, если эти идентификаторы видны пользователю, то вам следует просто позволить им выбрать то, что им нравится, и проверить их на уникальность (легко). Если они не видны пользователю (например, внутренний первичный ключ), просто сгенерируйте их последовательно, используя соответствующую технику, такую как Oracle Sequence или SQL Server AutoNumber (также легко).
Если эти идентификаторы являются попыткой обнаружить пользователя, который регистрируется более одного раза, тогда я согласился бы с тем, что вам следует рассмотреть криптографический хеш с последующим полным сравнением данных регистрации (имя, адрес и т. Д.). Однако для удобства использования вам потребуется перевести данные в каноническую форму (стандартный регистр букв, пробел, канонический адрес улицы и т. Д.), Прежде чем вычислять хэш или делать сравнение. В противном случае вы будете не соответствовать на основе тривиальных различий.
РЕДАКТИРОВАТЬ: Теперь, когда я лучше понимаю проблемное пространство, основываясь на ваших изменениях, я думаю, что весьма маловероятно, что ваш алгоритм (пока) поймает большинство совпадений. Помимо моего предложения о канонизации входных данных, я рекомендую вам рассмотреть подход, который приводит к ранжированному списку нескольких возможных совпадений (которые должны быть разрешены человеком, если это возможно), а не к попытке "все или ничего" в одном совпадении , Другими словами, я рекомендую подход поиска, а не поиск.
Возможно ли это в вашей ситуации?