Я бы предложил следующее. Сначала создайте алгоритм, который дает возможные имена пользователей, учитывая имя и фамилию.
например.
$foo->genPossibleUserNames('Dave', 'Smith');
может вернуть
- дсмит (первая фамилия, имя)
- Дасмит (первые 2 инициала. Фамилия)
- Дейвсмит (имя. Фамилия)
- dave.smith (имя '.' Фамилия)
- Давсмит (первые 3 инициала. Фамилия)
Вы бы упорядочили этот массив возможных имен пользователей, исходя из ваших личных предпочтений. Затем вы проверите базу данных на предмет уникальности этих имен и предоставите их в виде списка опций для вашего пользователя.
Конечно, если ваша пользовательская база становится достаточно большой, наличие dsmith1 неизбежно, но, по крайней мере, так оно побуждает пользователей сначала выбрать что-то более предпочтительное.