У меня есть игра RPG онлайн, к которой я отношусь серьезно. В последнее время у меня была проблема с пользователями, делающими поддельные символы с поддельными именами, просто набор различных букв. Как Ghytjrhfsdjfnsdms, Yiiiedawdmnwe, Hhhhhhhhhhejejekk. Я вынуждаю их изменить имена, но это становится слишком много. Что я могу сделать об этом?
Я мог так или иначе проверить так, по крайней мере, что Вы не можете использовать больше чем 2 из той же буквы друг около друга?? И также возможно, если это содержит гласные
Я бы рекомендовал сосредоточить вашу энергию на создании пользовательского интерфейса, который сделает его мозгом -dead легко перечислить все новые имена администратору, и большой жирный механизм «принудительного переименования», который минимизирует рабочую нагрузку администратора, вместо того, чтобы пытаться определить невероятно сложные и разнообразные правила, которые создают имя (и программировать регулярное выражение для сопоставить их!).
Обновление - однако на ум приходит одна вещь: раньше Second Life позволяла вам свободно указывать имя (возможно, они сверяются с базой данных имен, я не знаю), а затем выдает вам выбор нескольких сотен предопределенных фамилий на выбор. Для сетевой RPG этого может быть уже достаточно.
Я предлагаю использовать подход @ Unicron, предусматривающий простой отказ администратора, но при каждом отказе добавляйте имя в базу данных запрещенных имен. Возможно, вы сможете использовать эти данные для обнаружения определенных атак, генерирующих большое количество пользователей на основе шаблонов. Разумеется, будет очень сложно обнаружить единичные экземпляры.
. Будет ли ограничение количества согласных или гласных в строке и предотвращение повторения подсказки? В качестве регулярного выражения:
if(preg_match('/[bcdfghjklmnpqrtsvwxyz]{4}|[aeiou]{4}|([a-z])\1{2}/i',$name)){
//reject
}
Возможно, используйте iconv
с ASCII // TRANSLIT
, если вы разрешаете акцентированные символы.
У меня тоже была эта проблема. Легкий способ решить эту проблему - заставить имена пользователей проверяться на соответствие базе данных всемирных имен. По сути, у вас есть база данных на бэкэнде с несколькими сотнями тысяч имен и фамилий для обоих полов, и их имена совпадают.
Немного поискав в Google, вы можете найти множество баз данных имен.
Могу я как-нибудь проверить, чтобы вы, по крайней мере, не могли использовать более двух одинаковых букв рядом друг с другом ?? а также, возможно, если он содержит гласные
Если вы просто хотите это, вы можете сделать:
preg_match('/(.)\\1\\1/i', $name);
Это вернет 1
, если что-то появится три раза подряд или больше.
Эта ссылка может помочь.Вы также можете подключить его через (возможно, модифицированный) механизм синтезатора речи и проанализировать, насколько проблематично он генерирует речь, фактически не генерируя ее.
Вам следует попробовать реализовать модифицированную версию Наивного байесовского фильтра спама . Например, при обычном обнаружении спама вы вычисляете вероятность того, что слово является спамом, и используете вероятности отдельных слов, чтобы определить, является ли все сообщение спамом.
Точно так же вы можете загрузить список слов и вычислить вероятность того, что пара букв принадлежит реальному слову.
Например, создайте таблицу 26x26
, скажем, T
. Пусть 5-я строка представляет букву e
, а запись T (5,1)
будет количеством раз ea
, появившихся в вашем списке слов. После того, как вы закончите подсчет, разделите каждый элемент в каждой строке на сумму строки так, чтобы T (5,1)
теперь было процентным соотношением ea
в вашем слове. список в паре букв, начинающихся с e
.
Теперь вы можете использовать вероятность отдельной пары (например, в Jimy
это будет { Ji
, im
, iy
} чтобы проверить, подходит ли имя Jimy
.Вероятно, вам придется определить правильную вероятность порогового значения, но попробуйте - это не так сложно реализовать.
Что вы думаете о делегировании ответственности за создание пользователей стороннему источнику (например, Facebook, Twitter, OpenId ...)?
Это не решит вашу проблему, но для пользователя будет больше работы по созданию дополнительных учетных записей - что (при условии, что пользователи ленивы, поскольку большинство из них) должно препятствовать созданию дополнительных «фиктивных» пользователей.
Похоже, вам понадобится довольно сложная функция preg. Я не хочу тратить время на написание одного для вас, так как вы узнаете больше, написав его сами, но я помогу по пути, если вы опубликуете несколько попыток.
Вы можете использовать реализацию метафона, а затем искать «неестественные» шаблоны:
http://www.php.net/manual/en/function.metaphone.php
Это функция PHP для генерации строки метафона. Вы передаете строку, и она возвращает фонетическое представление текста. Теоретически вы можете передать большое количество «человеческих» имен, а затем сохранить базу данных допустимых комбинаций фонем. Чтобы проверить сомнительное имя, просто посмотрите, есть ли комбинации фонем в базе данных.
Надеюсь, это поможет!
А что если использовать Google Search API, чтобы посмотреть, возвращает ли имя какие-либо результаты?