Проверьте, кажется ли имя "человеком"?

У меня есть онлайн-игра RPG, которую я серьезно отношу. В последнее время у меня возникла проблема с тем, что пользователи делают фальшивые персонажи с фиктивными именами, всего несколько букв. Как Ghytjrhfsdjfnsdms, Yiiiedawdmnwe, Hhhhhhhhhhejejekk. Я заставляю их менять имена, но это становится слишком много. Что я могу сделать по этому поводу?

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

Ответ 1

Я бы порекомендовал сосредоточить свою энергию на создании пользовательского интерфейса, который облегчает перечисление всех новых имен администратору и большой толстый механизм "переименовать", который минимизирует рабочую нагрузку администратора, а не пытается определите невероятно сложные и разнообразные правила, которые делают имя (и программируют регулярное выражение для их соответствия!).

Обновить. На ум приходит одно: Second Life позволяет вам свободно указывать имя (возможно, они проверяют базу данных с именами, я не знаю) и затем дает вам выбор из нескольких сотен предопределенных имен для выбора. Для онлайн-RPG этого может быть уже достаточно.

Ответ 2

Вы можете использовать реализацию метафонов, а затем искать "неестественные" шаблоны:

http://www.php.net/manual/en/function.metaphone.php

Это функция PHP для генерации цепочки метафонов. Вы передаете строку и возвращает фонетическое представление текста. Теоретически вы могли бы передать большое количество "человеческих" имен, а затем сохранить базу данных действительных комбинаций фонем. Чтобы проверить сомнительное имя, просто проверьте, находятся ли в фоновом режиме комбинации фонем.

Надеюсь, это поможет!

Ответ 3

Что делать, если вы используете API поиска Google, чтобы узнать, вернёт ли оно какие-либо результаты?

Ответ 4

Я использую подход @Unicron, простой отклонений от администрирования, но при каждом отказе добавьте имя в базу данных запрещенных имен. Возможно, вы сможете использовать эти данные для обнаружения конкретных атак, генерирующих большое количество пользователей на основе шаблонов. Конечно, будет очень сложно обнаружить одноразовые.

Ответ 5

Ограничило бы количество согласных или гласных подряд и предотвратило бы повторение помощи? В качестве регулярного выражения:

if(preg_match('/[bcdfghjklmnpqrtsvwxyz]{4}|[aeiou]{4}|([a-z])\1{2}/i',$name)){
    //reject
}

Возможно, используйте iconv с ASCII//TRANSLIT, если вы разрешаете акцентированные символы.

Ответ 6

У меня тоже была эта проблема. Легкий способ решить это - заставить имена пользователей проверять базу данных всемирных имен. По существу у вас есть база данных на бэкэнд с несколькими сотнями тысяч первых и фамилий для обоих полов и сопоставление имени.

С небольшим поиском в google вы можете найти множество баз данных имен.

Ответ 7

Могу ли я как-то проверить, по крайней мере, вы не можете использовать более двух одинаковых букв рядом друг с другом? а также, возможно, если он содержит гласные

Если вы просто хотите этого, вы можете сделать:

preg_match('/(.)\\1\\1/i', $name);

Это вернет 1, если что-нибудь появится три раза подряд или больше.

Ответ 8

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

Ответ 9

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

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

Например, создайте таблицу 26x26, скажем, T. Пусть 5-я строка представляет букву e, а запись T(5,1) - это количество раз ea, появившееся в вашем списке слов. Когда вы закончите подсчет, разделите каждый элемент в каждой строке с суммой строки, чтобы теперь T(5,1) процентное число ea отображалось в списке слов в паре букв, начинающихся с e.

Теперь вы можете использовать вероятность отдельной пары (например, в Jimy, которая была бы {Ji, im, iy}, чтобы проверить, является ли Jimy приемлемым именем или нет. вероятно, нужно определить правильную вероятность порога, но попробуйте - это не так сложно реализовать.

Ответ 10

Что вы думаете о делегировании ответственности за создание пользователей в стороннем источнике (например, Facebook, Twitter, OpenId...)?

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

Ответ 11

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

http://php.net/manual/en/function.preg-match.php