2010-07-15 5 views
10

나는 진지하게 생각하고있는 온라인 RPG 게임을 가지고있다. 최근에 나는 가짜 이름으로 가짜 문자를 만드는 사용자들과 문제를 겪어왔다. Ghytjrhfsdjfnsdms와 마찬가지로, Yiiiedawdmnwe, Hhhhhhhhhhejejekk. 나는 그들에게 이름을 바꾸도록 강요하지만 너무 많이되고있다. 이 문제를 어떻게 해결할 수 있습니까?이름이 "인간"으로 보이는지 확인 하시겠습니까?

나는 적어도 당신이 서로 옆에 같은 편지 2 개 이상을 사용할 수 없으므로 어떻게 확인할 수 있을까요 ?? 또한 모음이 포함되어있는 경우도 가능합니다.

+1

영어 만 지원합니까? 말하지 않는 언어를 지원하는 경우 이름이 다음과 같은지 어떻게 알 수 있습니까? 익숙하지 않은 언어의 이름 또는 가짜? –

+11

웰스의 유효성을 확인하는 웨일스 어 이름! :) – Unicron

+0

영어로만 제공됩니다. haha unicron – Jimy

답변

1

This link 도움이 될 수도 있습니다. 또한 (아마도 수정 된) 음성 합성기 엔진을 통해 그것을 연결하고 실제 생성하지 않고도 음성을 생성하는 데 얼마나 많은 문제가 있는지 분석 할 수 있습니다.

3

Google 검색 API를 사용하여 이름이 결과를 반환하는지 보려면 어떻게해야합니까?

+3

http://www.google.com/search?q=dfjkdfjkd – kennytm

+1

특정 언어가 아닌 '인간'으로 보이는 이름으로 되돌아갑니다. –

+6

은 영리하지만 신뢰할 수는 없습니다. –

-3

마치 당신이 꽤 복잡한 preg 기능을 필요로하는 것처럼 보입니다. 나는 당신이 당신 자신을 더 많이 쓰는 것을 배울 것이기 때문에 당신을 위해 하나를 쓰는 시간을 가지기를 원하지 않는다. 그러나 당신이 어떤 시도를 게시한다면 나는 그 길을 따라 도울 것이다.

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

+1

행운을 빈다. 코드인지 정규 표현식인지에 관계없이 가양 성을 갖지 않는 것은 불가능합니다. – wadesworld

+3

@ 웨이드 윌리엄스 (Wade Williams) - "거짓 긍정 (false positive)을 갖지 않는 것이 불가능합니다"라는 트리플 부정이 있습니까? –

+0

좋은 지적입니다. 그러나 여기에서는 완벽한 솔루션이 거의 없을 것입니다. –

11

나는 그것이 뇌사 관리자에게 모든 새로운 이름을 나열하기 쉽고, 살찐 "힘의 이름을 변경하는"관리자의 최소화 메커니즘을 만드는 사용자 인터페이스를 구축에 에너지를 집중 추천 워크로드는 이름을 짓는 엄청나게 복잡하고 다양한 규칙을 정의하려고 시도하는 대신 (그리고 규칙에 맞는 정규 표현식을 프로그램하십시오!)

업데이트 - 세컨드 라이프는 이름을 자유롭게 지정할 수있게 해주었지만 (어쩌면 그들은 이름의 데이터베이스와 비교해 보았을 지 모르겠다) 선택할 수있는 몇백 개의 미리 정의 된 성을 선택합니다. 온라인 RPG의 경우에는 이미 충분할 수 있습니다.

+1

대답은 아니지만 좋은 대답인데 –

+1

@Daniel 'yar'Rosenstark, 나는 그런 말을하지 않습니다. 사람들이 단순히 묻는 질문에 답하는 경우에만 질문에 대한 진정한 대답입니까? 나는 정말로 희망하지 않는다. 누군가 망치로 집을 지을 방법을 묻는다면 망치로 그 사람을 도우려고해야합니까 아니면 망치 만 사용하는 것이 좋지 않을 수도 있다고 대답해야합니다. 다른 도구들도 제안 할 수 있습니까? 나는 그것이 후자이기를 바랄 것이다. –

+0

이 외에도 다른 방법의 주된 문제점은 거짓 긍정 (false-positives)이지만 "다른 방법으로 가짜가 될 가능성이 높음"으로 정렬 할 수 있습니다. –

2

이 문제도 발생했습니다. 이를 해결하는 쉬운 방법은 사용자 이름을 전세계 이름의 데이터베이스에 대해 유효성을 검사하도록하는 것입니다. 본질적으로 두 성별에 대한 수십만의 성과 이름을 가진 백엔드 데이터베이스가 있으며 이름이 일치합니다.

Google에서 약간의 검색을 통해 많은 이름 데이터베이스를 찾을 수 있습니다.

2

어쨌든 적어도 서로 위의 동일한 문자를 2 개 이상 사용할 수는 없습니까? 아무것도 행 이상에 세 번 나타나는 경우

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

1를 반환합니다 또한 어쩌면이 포함되어 있으면 그냥이 원하는 경우에, 당신은 할 수

때문에 모음.

6

당신은 메타 폰 구현을 사용하고 "자연스러운"패턴을 볼 수 있었다 :

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

이 메타 폰 문자열 생성을위한 PHP 함수이다. 문자열을 전달하면 텍스트의 음성 표현이 반환됩니다. 이론적으로 많은 수의 "인간"이름을 전달한 다음 유효한 음운 조합 데이터베이스를 저장할 수 있습니다. 의심스러운 이름을 테스트하려면 음소 조합이 데이터베이스에 있는지 확인하십시오.

희망이 도움이됩니다.

+0

이것은 OP가 찾고있는 것과 더 가깝습니다. 알고리즘은 이미 문서화되고 구현되었습니다 : http://www.sil.org/computing/lascruces.html – Kilanash

+0

그것은 좋은 생각이지만, PHP에서 철자법 수정과 어떻게 든 관련이 있지 않습니까? 내가 틀렸다면 나를 바로 잡아라. – tisuchi

3

나는 쉽게 거부 할 수있는 @ Unicron의 접근 방식을 취하지 만 각 거부에서 금지 된 이름의 데이터베이스에 이름을 추가합니다. 이 데이터를 사용하여 패턴을 기반으로 한 수많은 공격을 탐지 할 수 있습니다. 당연히 일회용을 탐지하는 것은 매우 어려울 것입니다.

+0

선례를 버리는 좋은 아이디어! – Unicron

3

행의 자음이나 모음의 양을 제한하고 반복 도움말을 방지하겠습니까? 정규식으로 : 당신이 강조 문자를 허용하는 경우

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

아마도 ASCII//TRANSLITiconv를 사용합니다.

0

사용자 생성의 책임을 Facebook, Twitter, OpenId ...와 같은 타사 소스에 위임하는 것에 대해 어떻게 생각합니까?

이렇게하면 문제가 해결되지는 않지만 사용자가 추가 계정을 만들면 더 많은 작업이 수행됩니다. 대부분의 경우 사용자가 게으르다 고 가정하면 추가 사용자를 생성하지 않아야합니다.

1

수정 된 버전 Naive Bayes spam filter을 구현해야합니다. 예를 들어, 일반적인 스팸 검색에서 단어가 스팸 일 확률을 계산하고 개별 단어 확률을 사용하여 전체 메시지가 스팸인지 확인합니다.

마찬가지로 단어 목록을 다운로드하고 한 쌍의 글자가 실제 단어에 속할 확률을 계산할 수 있습니다.

예를 들어 T이라는 26x26 테이블을 만듭니다. 다섯 번째 행이 e 문자를 나타내고 T(5,1)은 단어 목록에 나타난 횟수가 ea으로 표시됩니다. 계산이 끝나면 각 행의 각 요소를 행의 합계로 나누어 T(5,1)ea이 단어 목록에 e으로 시작하는 문자 쌍으로 나타나는 백분율이되도록 지정합니다. 이제

, 당신은 각각의 쌍 확률을 사용할 수 있습니다 (예 Jimy에 그 것이다 {Ji, im, iy} 임계 값에 대한 권리 확률을 결정하는 Jimy이 허용 이름인지 여부. 당신은 아마 한 것 확인 에 있지만 시도해보십시오 --- 구현하기가 어렵지 않습니다.

관련 문제