проверьте, кажется ли имя “человеческим”?

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

Я мог так или иначе проверить так, по крайней мере, что Вы не можете использовать больше чем 2 из той же буквы друг около друга?? И также возможно, если это содержит гласные

10
задан Jacob 15 July 2010 в 19:31
поделиться

11 ответов

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

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

11
ответ дан 3 December 2019 в 15:21
поделиться

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

3
ответ дан 3 December 2019 в 15:21
поделиться

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

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

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

3
ответ дан 3 December 2019 в 15:21
поделиться

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

Немного поискав в Google, вы можете найти множество баз данных имен.

2
ответ дан 3 December 2019 в 15:21
поделиться

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

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

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

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

2
ответ дан 3 December 2019 в 15:21
поделиться

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

1
ответ дан 3 December 2019 в 15:21
поделиться

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

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

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

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

1
ответ дан 3 December 2019 в 15:21
поделиться

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

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

0
ответ дан 3 December 2019 в 15:21
поделиться

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

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

-3
ответ дан 3 December 2019 в 15:21
поделиться

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

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

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

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

6
ответ дан 3 December 2019 в 15:21
поделиться

А что если использовать Google Search API, чтобы посмотреть, возвращает ли имя какие-либо результаты?

3
ответ дан 3 December 2019 в 15:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: