Captcha, generateur une image avec le code voulut ( systeme antispam )

Contenu du snippet

Bonjour,
Encore une source on ne peut plus répandu mais bien utile lorsque l'on veut developper un systeme antispam pour forum, livre d'or, commentaires etc...
En réalité, ma source permet d'afficher un code cachée dans une image ( aller voir l'exemple sur http://pproject.webzzanine.net/image.php si vous ne comprenez pas ). J'ai également mis une fonction qui genere un code alphanumerique simple du nombre de caractere que l'on souhaite. A vous de coder le reste comme bon vous semble pour l'utiliser, par exemple, pour gener un peu l'action des robots qui voudraient spammer vos pages.

Source / Exemple :


<?php

function make_img($content = '')
{
	$timage = array((strlen($content)*18)+10,15); // array(largeur, hauteur) de l'image; ici la largeur est fonction du nombre de lettre du contenu, on peut bien sur mettre une largeur fixe.
	$content = preg_replace( '/(\w)/', '\\1 ', $content); // laisse plus d'espace entre les lettres
	$image  = imagecreatetruecolor($timage[0], $timage[1]); // création de l'image

	// definition des couleurs
	$white  = imageColorAllocate($image, 255, 255, 255);
	$grey   = imageColorAllocate($image, 210, 210, 210);
	$text_color = imageColorAllocate($image, rand(0, 150), rand(0, 50), rand(0, 60));

	imageFill($image, 0, 0, $white); // on remplit l'image de blanc
	
	// on remplit l'image avec des polygones (couleurs claires)
	for ($i = 0; $i < rand(3, 5); $i++)
	{
		$x = rand(3, 10);
		$poly = array();
		for ($j = 0; $j < $x; $j++)
		{
			$poly[] = rand(0, $timage[0]);
			$poly[] = rand(0, $timage[1]);
		}
		imageFilledPolygon($image, $poly, $x, imageColorAllocate($image, rand(130, 255), rand(130,255), rand(130, 255)));

	}
	
	// Création des pixels gris
	for ($i = 0; $i < $timage[0] * $timage[1] / rand(15, 18); $i++)
	{
		imageSetPixel($image, rand(0, $timage[0]), rand(0, $timage[1]), $grey);
	}

	// affichage du texte demandé; on le centre en hauteur et largeur (à peu près ^^")
	imageString($image, 5, ceil($timage[0]-strlen($content)*8)/2, ceil($timage[1]/2)-9, $content, $text_color);

	$type = function_exists('imageJpeg') ? 'jpeg' : 'png';
	@header('Content-Type: image/' . $type);
	@header('Cache-control: no-cache, no-store');
	($type =='png') ?imagePng($image) : imageJpeg($image);
	ImageDestroy($image);

	exit();
}

function generer_code($car) {
	$string = "";
	$chaine = "abcdefghijklmnpqrstuvwxy123456789";
	for($i=0; $i<$car; $i++) {
	$string .= $chaine[rand()%strlen($chaine)];
	}
	return $string;
} 

make_img(generer_code(5));

?>

Conclusion :


Je peux ameliorer la source si ça peut être utile à certain ( en la transformant en un vrai systeme antispam par exemple ) mais je pense qu'il est plus interessant de faire les choses par soi même ^^.
Tout commentaires sont les bienvenus.

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.