begin process at 2010 03 22 16:58:13
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > MOULINETTE DE TEST POUR ÉVITER LES MESSAGES POUBELLES

MOULINETTE DE TEST POUR ÉVITER LES MESSAGES POUBELLES


 Information sur la source

Note :
7 / 10 - par 3 personnes
7,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Divers Classé sous :verification, formulaire, poubelle Niveau :Débutant Date de création :26/11/2006 Date de mise à jour :26/11/2006 18:27:26 Vu / téléchargé :2 928 / 100

Auteur : rapidos

Ecrire un message privé
Commentaire sur cette source (24)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Salut a tous,
voila en ayant marre de voir les gros boulets du net remplir les bases de données avec des messages inutiles j'ai développé ce script qui peut aussi etre nécessaire lorsqu'on attend une réponse autre que "qlksdj qlmksdjqsdmlj" lors de la création d'un accompte par exemple.

Lorsque j'aurai un peu de temps je m'efforcerais de le compléter et de l'optimiser
Pour l'instant il détectes les phrases avec de multiples repetitions de charactères comme par exemple
"looooooooooooooooooool" ou autre trucs qui ne servent a rien

Et il détecte aussi les phrases tel que
"qslmkj qlsjflmqskjdf lmkqsdjf"

Je n'utilise pas de dictionnaire, afin de rendre ce script exportable dans nimporte quelle langue.

Le principe de base étant de détecter la position des touches frappées les unes par rapport aux autres et d'en déduire si le mec a tapé comme un bourrin ou pas...
Le code est assez succin pour le moment mais j'essaierai, comme dit plus haut, de le compléter, et notamment d'y ajouter un algo un peu plus performant avec une matrice, afin de rendre le tout un peu plus évolué :)

Je l'ai testé avec un bon nombre de phrases il ne m'a pas paru défaillant et bien sur tout est paramétrable !


si ca peux servir a quelqu'un ;)

Source

  • <?php
  • if ($_GET['debug'] == 1)
  • {
  • if (moulinette_test($_GET['word']))
  • echo "<font color=green>valid sentence</font>";
  • else
  • echo "<font color=red>Unvalid sentence</font>";
  • }
  • function moulinette_test($word)
  • {
  • return (moulette1($word) && moulette2($word) && dico($word));
  • }
  • function dico($word)
  • {
  • $grace = 1;
  • /*
  • ** Edit the forbidden words here
  • */
  • $f = array();
  • $f[0] = "zobi";
  • $f[1] = "caca";
  • $len_forbidden_words = count($f);
  • for ($i = 0; $i < $len_forbidden_words /*&& $grace*/; $i++) //remove /* and */ to get optimization
  • if (ereg($f[$i], $word))
  • $grace--;
  • if ($_GET['debug'] == 1)
  • {
  • echo "dico for ".$word."<br>";
  • if ($grace <= 0)
  • echo "Found ".(($grace * (-1)) + 1)." forbidden words";
  • echo "<br><br>";
  • }
  • if ($grace > 0)
  • return (1);
  • else
  • return (0);
  • }
  • function set_keyboard()
  • {
  • /*
  • ** Azerty configuration
  • */
  • $keyboard = array();
  • /*
  • ** Azerty Lower case
  • */
  • $keyboard[0] = "azertyuiop^$"; // first line
  • $keyboard[1] = "qsdfghjklmù*"; // second line
  • $keyboard[2] = "<wxcvbn,;:!"; // third line
  • /*
  • ** Azerty upper case
  • */
  • $keyboard[3] = "AZERTYUIOP"; // first line
  • $keyboard[4] = "QSDFGHJKLM%µ"; // second line
  • $keyboard[5] = "<WXCVBN,;:!"; // third line
  • return ($keyboard);
  • }
  • function moulette2($word)
  • {
  • /*
  • ** If it is sentence that contains at least 3 words with multiple char repetitions
  • ** KILL
  • */
  • $len_word = strlen($word);
  • $grace = 6; // 3 allowed repetitions THEN KILL
  • $spaces = 3; // must contain more than 3 spaces
  • if ($len_word > 0)
  • {
  • for ($i = 1; $i < $len_word; $i++)
  • if ($word[$i - 1] == $word[$i])
  • $grace--;
  • elseif ($word[$i] == "%20" || $word[$i] == " ")
  • $spaces--;
  • if ($_GET['debug'] == 1)
  • {
  • echo "moulette2 for $word<br>";
  • echo "condition: grace > 0 && space < 0 <br>";
  • echo "grace: $grace<br>";
  • echo "spaces: $spaces<br><br>";
  • }
  • if ($grace < 0 && $spaces > 0) // multiple repetitions in a (max) $spaces + 1 words sentence
  • return (0);
  • return (1);
  • }
  • else
  • return (0); // word has 0 length
  • }
  • function moulette1($word)
  • {
  • /*
  • ** if there are more than 3 neightbourgh letters it is probably a test message
  • */
  • $allowed_grace = 4; // Max allowed letters follow between two spaces
  • $keyboard = array();
  • $keyboard = set_keyboard();
  • $defined_keyboards = (count($keyboard) + 1) / 3;
  • $grace = $allowed_grace;
  • for (; $defined_keyboards > 0; $defined_keyboards--) //for each keyboard
  • {
  • $word_length = strlen($word);
  • for ($i = 0; $i < $word_length && $grace > 0; $i++)
  • {
  • if ($word[$i] == " " || $word[$i] == "%20")
  • $grace = $allowed_grace;
  • /*
  • ** Loop to find the position of the letter in the right keyboard
  • */
  • $k = ($defined_keyboards * 3) - 1;
  • $mouchard = 3; // nb of keyboard lines
  • while ($mouchard > 0)
  • {
  • $len_keyboard = strlen($keyboard[$k]);
  • for ($j = 0; $j < $len_keyboard && $keyboard[$k][$j] != $word[$i]; $j++)
  • ;
  • if ($keyboard[$k][$j] == $word[$i])
  • $mouchard = -1;
  • else
  • {
  • $mouchard--;
  • $k--;
  • }
  • }
  • /*
  • ** We found the letter in one of the keyboards
  • ** But we need to check if it isnt a "e" or e "r" beaceause they are used very often
  • ** and if we include them in our test we should probably get an error !
  • */
  • if ($mouchard == -1 && $word[$i] != "e" && $word[$i] != "r" && $word[$i] != "t")
  • {
  • // detection de la touche dacote directement
  • if ($keyboard[$k][$j + 1] == $word[$i + 1] || $keyboard[$k][$j - 1] == $word[$i + 1])
  • $grace--;
  • // detection de deux touches plus loin
  • if ($keyboard[$k][$j + 1] == $word[$i + 2] || $keyboard[$k][$j - 1] == $word[$i + 2])
  • $grace--;
  • }
  • }
  • }
  • if ($_GET['debug'] == 1)
  • {
  • echo "<br>moulette 1 for: ".$word."<br>";
  • echo "condition is grace > 0<br>";
  • echo "grace is : $grace<br>";
  • if ($grace <= 0)
  • echo "matched error with: ".$word[$i - 2].$word[$i - 1].$word[$i]."<br>";
  • echo "<br><br>";
  • }
  • if ($grace > 0)
  • return (1);
  • else
  • return (0);
  • }
  • ?>
<?php
if ($_GET['debug'] == 1)
{
	if (moulinette_test($_GET['word']))
		echo "<font color=green>valid sentence</font>";
	else
		echo "<font color=red>Unvalid sentence</font>";
}



function moulinette_test($word)
{
	return (moulette1($word) && moulette2($word) && dico($word));
}

function dico($word)
{
	$grace = 1;

	/*
	** Edit the forbidden words here
	*/
	$f = array(); 
	$f[0] = "zobi";
	$f[1] = "caca";
	$len_forbidden_words = count($f);
	
	for ($i = 0; $i < $len_forbidden_words /*&& $grace*/; $i++) //remove /* and */ to get optimization
		if (ereg($f[$i], $word))
			$grace--;
			
	if ($_GET['debug'] == 1)
	{
		echo "dico for ".$word."<br>";
		if ($grace <= 0)
			echo "Found ".(($grace * (-1)) + 1)." forbidden words";
		echo "<br><br>";
	}		

	if ($grace > 0)
		return (1);
	else
		return (0);
}

function set_keyboard()
{
	/*
	** Azerty configuration
	*/
	$keyboard = array();
	
	/*
	** Azerty Lower case
	*/
	$keyboard[0] = "azertyuiop^$"; // first line
	$keyboard[1] = "qsdfghjklmù*"; // second line
	$keyboard[2] = "<wxcvbn,;:!"; // third line
	
	/*
	** Azerty upper case
	*/
	$keyboard[3] = "AZERTYUIOP"; // first line
	$keyboard[4] = "QSDFGHJKLM%µ"; // second line
	$keyboard[5] = "<WXCVBN,;:!"; // third line
	
	return ($keyboard);
}



function moulette2($word)
{
	/*
	** If it is sentence that contains at least 3 words with multiple char repetitions
	** KILL 
	*/
	
	$len_word = strlen($word);
	$grace = 6; // 3 allowed repetitions THEN KILL
	$spaces = 3; // must contain more than 3 spaces

	if ($len_word > 0)
	{
		for ($i = 1; $i < $len_word; $i++)
			if ($word[$i - 1] == $word[$i])
					$grace--;
			elseif ($word[$i] == "%20" || $word[$i] == " ")
					$spaces--;

if ($_GET['debug'] == 1)
{
		echo "moulette2 for $word<br>";
		echo "condition: grace > 0 && space < 0 <br>";
		echo "grace: $grace<br>";
		echo "spaces: $spaces<br><br>";
}

		if ($grace < 0 && $spaces > 0) // multiple repetitions in a (max) $spaces + 1 words sentence
				return (0);

		return (1);
	}
	else
		return (0); // word has 0 length
}

function moulette1($word)
{
	/*
	** if there are more than 3 neightbourgh letters it is probably a test message
	*/ 
	$allowed_grace = 4; // Max allowed letters follow between two spaces
	
	$keyboard = array();
	$keyboard = set_keyboard();

	$defined_keyboards = (count($keyboard) + 1) / 3;
	$grace = $allowed_grace;
	for (; $defined_keyboards > 0; $defined_keyboards--) //for each keyboard
		{
			$word_length = strlen($word);
			for ($i = 0; $i < $word_length && $grace > 0; $i++)
				{
					if ($word[$i] == " " || $word[$i] == "%20")
						$grace = $allowed_grace;
					/*
					** Loop to find the position of the letter in the right keyboard
					*/
					$k = ($defined_keyboards * 3) - 1;
					$mouchard = 3; // nb of keyboard lines
					
					while ($mouchard > 0)
					{
						$len_keyboard = strlen($keyboard[$k]);				
						for ($j = 0; $j < $len_keyboard && $keyboard[$k][$j] != $word[$i]; $j++)
							;
						if ($keyboard[$k][$j] == $word[$i])
							$mouchard = -1;
						else
							{
								$mouchard--;
								$k--;
							}
					}
					
					/*
					** We found the letter in one of the keyboards
					** But we need to check if it isnt a "e" or e "r" beaceause they are used very often
					** and if we include them in our test we should probably get an error !
					*/
						
					if ($mouchard == -1 && $word[$i] != "e" && $word[$i] != "r" && $word[$i] != "t")
						{
							// detection de la touche dacote directement
							if ($keyboard[$k][$j + 1] == $word[$i + 1] || $keyboard[$k][$j - 1] == $word[$i + 1])
								$grace--;
							// detection de deux touches plus loin
							if ($keyboard[$k][$j + 1] == $word[$i + 2] || $keyboard[$k][$j - 1] == $word[$i + 2])
								$grace--;
						}
				}
		}
		
		if ($_GET['debug'] == 1)
		{
			echo "<br>moulette 1 for: ".$word."<br>";
			echo "condition is grace > 0<br>";
			echo "grace is : $grace<br>";
			if ($grace <= 0)
					echo "matched error with: ".$word[$i - 2].$word[$i - 1].$word[$i]."<br>";
			echo "<br><br>";
		}
		
	if ($grace > 0)
		return (1);
	else
			return (0);
}

?>

 Conclusion

voici un lien pour le tester:
http://drrapidos.free.fr/phpcs/moulinette_anti_te st.php?debug=1&word=Vive phpcs !!!
http://drrapidos.free.fr/phpcs/moulinette_anti _test.php?debug=1&word=qsdlkfj qlkjflqmksdj gmlkqsdg
http://drrapidos.free.fr/phpcs/moulinette _anti_test.php?debug=1&word=looooooooooooooooooooo ol
http://drrapidos.free.fr/phpcs/moulinette_anti_ test.php?debug=1&word=je n'ai qu'un mot a dire: looooooooooooooooool

de maniere générale vous n'aurez qu'a modifier $grace pour rendre la moulinette plus souple.
Et on peux également rajouter un caliver le clavier qwerty, dworak ou autre claviers barbares :)

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

26 novembre 2006 16:07:27 :
correction des photes d'ortograf
26 novembre 2006 16:09:14 :
none
26 novembre 2006 18:25:18 :
Ajout de la fonction dico
26 novembre 2006 18:27:26 :
comments

 Sources de la même categorie

CALCUL D'UNE DISTANCE ORTHONORMIQUE par bossfoot
Source avec Zip ESPACE ADMIN SIMPLE par mousaid_88
Source avec Zip IMAGINE-CMS V2.20 par djack69
Source avec Zip AFFICHAGE ET GESTION DE DIAPORAMA EN PHP SANS BASE DE DONNÉE... par mldvb
Source avec Zip Source avec une capture PARSER ALLOCINE par cyrhades

 Sources en rapport avec celle ci

TESTEUR DE REGEX par hornetbzz
Source avec Zip CRAWLER DE SITE EN PHP par Mcjo
Source avec Zip FORMULAIRE EMAIL AVEC PIECE JOINTE REPRIS DE LITTLEBUBU par cfndiaye
Source avec Zip CLASSE FORMULAIRE par wolfcyber95
FORMULAIRE PHP + VERIFICATION + ENVOI DU MAIL par cosmoswarezone1

Commentaires et avis

Commentaire de wizad le 26/11/2006 17:44:47

bon déja je salut l'idée. Je sait pas si c'est ton objectif mais ça pourrait faire un détecteur de spam à la fin.

Je test et te donne mon avis plus détaillé.

Commentaire de rapidos le 26/11/2006 17:53:01

Euh, détecteur de spam ca dépend vachement ...

si par spam tu entends un flood massif de messages contenant uniquement des caractères bidons alors oui :)

Commentaire de wizad le 26/11/2006 18:03:32

oui entre autre le flood bidon mais les messages contenant certaine mention tel porn, viagra,... assez fréquent sur les formulaire devrait aussi pouvoir ^tre filtré (moyennant peut être amélioration).

Commentaire de wizad le 26/11/2006 18:07:17

c'est pas encore au point :

chaine : "vfeiz rezojvre zvteoz"

Résultat :
"moulette 1 for: vfeiz rezojvre zvteoz
condition is grace > 0
grace is : 4


moulette2 for vfeiz rezojvre zvteoz
condition: grace > 0 && space < 0
grace: 6
spaces: 1

valid sentence"

Commentaire de rapidos le 26/11/2006 18:07:45

j'y travail la justement..
Apres une courte pause je me suis apercu que je pourrais un peu factoriser le code en plusieurs fonctions ..

et ouais j'intégrerais un dico de mot interdits ;)

Commentaire de wizad le 26/11/2006 18:17:12

ah aussi mettre ça sous la forme d'une classe serait beaucoup mieux.

Commentaire de rapidos le 26/11/2006 18:31:35

ouais pour ce qui est de la classe j'y ai pensé, j'en ai encore jamais fait, faudra que j'y jette un oeil ...

Et pour ta phrase c'est claire qu'elle est pas encore détectée .. Le seul pb c'est dans le soucis d'internationalisation parceque vu comment tu as placés les touches, je penses qu'avec la méthode que j'utilise ca risque de jamias etre détecté ...

On dirait presque que tu as méthodiquement appuyé sur des touches pour bypasser la moulinette :)
En tous cas je vais essayer d'y réfléchir

Commentaire de wizad le 26/11/2006 18:56:23

pour ma phrase j'ai fait du hasard complet sur tout le clavier.

Commentaire de Naixn le 27/11/2006 14:18:30

Question toute con : tu serais pas à epita ? :p

Commentaire de rapidos le 27/11/2006 16:35:10

oui, tu me diras y a qu'un epiteen pour coder une moulinette aussi inutile :)

ps: la norme est bonne ? :)

Commentaire de Naixn le 27/11/2006 16:44:06

C'est surtout : y'a qu'un épitéen pour appeler ça une "moulette" :)

Commentaire de hackademius le 27/11/2006 17:37:10

euh ... sans vouloir passer pour un *** , c'est quoi  "epita" ? a part le lieu ou habite les epitéens ?
c'est un vrai lieu ? une insulte ? un terme technique ? .....

merci de nous expliquer a nous incultes .

Commentaire de wizad le 27/11/2006 17:41:07

c'est une école privée d'informatique

Commentaire de hackademius le 27/11/2006 18:46:01

ah ouai

ok. merci pour l'info.

Commentaire de FhX le 28/11/2006 22:13:33

C'est la où vont tous les boutonneux des futurs "devs"Microsoft :p

Les autres généralements, ils sont ailleurs ^^

Commentaire de TheSin le 05/12/2006 07:29:16

Ouai, c'est bien résumé FhX :-P
J'ai une ptite question ... comment tu va pouvoir adapter ton code avec des matrices? J'ai un peu de mal à piger comment cet outils pourrait se révéler plus pratique ...

Commentaire de rapidos le 05/12/2006 15:03:07

Bon déja je vais passer sur le troll qui concerne l'épita, parceque sinon on s'embarque dans un sujet qui n'a ni queue ni tête et je vous remercie pour votre participation sur ce sujet.

Ensuite en ce qui concerne la matrice, si tu regardes bien mon code tu t'apercois qu'une faiblesse repose sur le fait qu'il détecte les touches cotes a cotes + ou - 1 touche pret sur la meme ligne mais pas encore avec la ligne du dessus ...
Dans 90% des tests que j'ai fait la fonction actuelle détecte le truc de bourrin, mais si le mec appuye UNIQUEMENT  sur des touches en colonne alors il passera au travers ... mais la disposition du clavier fait que ce cas est tres rare ...

Voila j'espere que j'ai répondu a ta question

Commentaire de TheSin le 05/12/2006 18:08:05

vouip, merci pour la réponse rapidos :-)

Commentaire de wizad le 08/12/2006 16:10:07

Pour ma part dans le cadre d'un forum pour éviter le spam, je vais essayer de passer par le théorème de Bayes qui est un des plus utilisé dans la détection de spam.

Commentaire de rapidos le 08/12/2006 16:38:41

Ah je ne connais pas,
je vais me renseigner dessus des que j'aurais deux minutes ...

Merci pour l'info

Commentaire de jeromexavier le 13/12/2006 11:51:51

Vous ne vous posez jamais la question pourquoi ces prétendus développeur (arnaqueur) sont incapable d'ecrire en francais les commentaires de leurs (soit-disant) code ?

peut-etre parcequ'ils n'en sont pas les auteurs...

Commentaire de wizad le 13/12/2006 14:23:05

petite information : dans le domaine de la programmation (notamment dans le cas de la diffusion de source), il est d'usage et généralement vivement recommandé de mettre les commentaire en anglais. On va quand même pas en faire une version par langue de diffusion non plus.

Commentaire de Naixn le 13/12/2006 16:52:06

Bien d'accord. Pour ma part, que ce soit au boulot, à l'école ou pour moi, quelque soit le code, rien dedans n'est en français. Que ce soit variables, commentaires, noms de fonctions, etc. Tout en anglais.
C'est un (très) bonne habitude à prendre. :)

Commentaire de rapidos le 13/12/2006 19:26:08

Je prends ca comme un compliment jeromexavier :D, mais si certaines parties de ce code t'échappent inutile de devenir argneu, just ask ;)

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Formuaire [ par Sannazzarotiti ] Bonjour a tous. Voila j'aimerais que qand je clique sur Continuer dans le formulaire de mon site, qu'il y est un un nouvelle fenetre (popup je crois) verification & envoi des infos d'un formulaire petite aide svp [ par Mascotte_Alex ] Bonsoir, je suis actuellement a la recherche d'un petit formulaire me permettant de creer 3 champsNomAdresse Mail Votre QuestionCreer le formulaire je Formulaire avec verification dynamique [ par bladebo ] BonjourVoila j'aimerai savoir comment faire pour vérifier un formulaire et faire un affichage qui se modifie si certaines zones du formulaire ne sont verification de numéro de téléphone dans un formulaire [ par bibo01 ] Bonjour,je vais mettre un formulaire  sur mon site web pour que l'utilisateur taper son numéro de téléphone et il me faut aussi de vérifier ce numéro formulaire verification [ par johnmichel57 ] bonjour, encore moi desole....Voila, j'ai mon formulaire, quand je clique sur envoi il y a verification, tout marche correct, mais si il y a un champ verification de formulaire online [ par amartu ] Salut,Voila, je suis entraint de faire un formulaire,je l'ai terminé mais j'aimerai que ce formulaire soit verifier selon une base de données mais j'a verification de formulaire de contact [ par mnou ] mnou Bonjour j un problème lié au formulaire de contact c à dire la vérification des champs de contact : Verification formulaire pour eviter doublon de nom [ par sebing ] Bonjour, Novice en codage, j'ai pas réussi a trouver mon bonheur sur internet. J'ai un formulaire d'inscription mais j'aimerai rajouter un vérificate


Nos sponsors


Appels d'offres

Sondage...

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,671 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales