Captcha ( anti-spam, anti-robot )

Soyez le premier à donner votre avis sur cette source.

Vue 14 674 fois - Téléchargée 1 490 fois

Description

Génération d'une image pour anti-robot/anti-spam

A chaque chargement de la page, voici ce qui change :

1/ La couleur de fond
2/ La chaîne de caractère
3/ La couleur de chaque caractère ( plus foncé que la couleur de fond dans tous les cas )
4/ La police de chaque caractère
5/ L'angle de chaque caractère
6/ La taille de chaque caractère
7/ La position vertical de chaque caractère

Aucun caractère sort de l'image.
De temps en temps il y a des chiffres qui se chevauchent suivant l'angle, le chiffre, sa taille et sa position, mais ça reste dans 99% des cas, lisible. ( pour ma part )

Source / Exemple :


<?php
session_start();

srand(); //initialisation du générateur mais plus obligatoire > PHP 4.2

// Définition du content-type
header("Content-type: image/png");

$lettres = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z');

$code = $lettres[rand(0,25)].rand(100,1000000); 
$longueurcode = strlen($code);

$_SESSION['code'] = $code; //pour pouvoir tester si le code saisie est bien égal à celui saisie ;)

$largeur = $longueurcode * 25;
$hauteur =  40;

$image = imagecreatetruecolor($largeur, $hauteur);

$couleurfond = imagecolorallocate($image, rand(150,255),rand(150,255),rand(150,255));

imagefilledrectangle($image, 0, 0, $largeur, $hauteur, $couleurfond);

$fontchiffre = array('1.ttf','2.ttf');
$fontlettre = array('3.ttf');

imagettftext($image, rand(15,30), rand(-45,15), 10, 35, imagecolorallocate($image, rand(10,100) ,rand(10,100),rand(10,100)), $fontlettre[0], $code[0]);

for ($i = 1; $i < $longueurcode; $i++) 
{
    $largeurx = 20 * $i + 30;
    $hauteury = rand(25,40);
    imagettftext($image, rand(27,32), rand(0,45), $largeurx,$hauteury, imagecolorallocate($image, rand(10,100) ,rand(10,100),rand(10,100)), $fontchiffre[rand(0,1)], $code[$i]);
}

imagepng($image); //génère l'image
imagedestroy($image); //détruit l'image

?>

Conclusion :


Un petit truc avec la police 3.ttf, elle s'affiche en majuscule, alors que la lettre est en minuscule, mais bon ça, c'est le créateur de la police qui a voulu tout mettre en majuscule, la seule différence, c'est que la lettre est inversé pour les majuscules.. ><
Pour ma part, vu que j'ai mis que des minuscules, lors du test, j'utilise la fonction php strtolower() pour le code saisie.

Voilà voilà, si quelqu'un arrive a bousillé mon captcha, si c'était possible qu'il me le fasse savoir pour que je puisse l'améliorer.
C'est ma première source que je poste ici, en espérant qu'elle puisse aider des personnes.

Si vous avez des questions, ou des critiques, n'hésitez pas.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

maxroucool
Messages postés
44
Date d'inscription
jeudi 20 novembre 2003
Statut
Membre
Dernière intervention
28 janvier 2013
-
J'étais justement en train de chercher un captcha et c'est le seul de ceux que j'ai trouvé qui soit simple, codé en quelques lignes et lisible!
Tres bien, j'ai juste changé les polices pour en mettre des plus basiques (arial, courrier, times) car je ne les trouve pas tres lisibles les tiennes.
cs_wizad
Messages postés
356
Date d'inscription
samedi 30 octobre 2004
Statut
Membre
Dernière intervention
14 avril 2009
-
Comme d'habitude ce système posent d'énorme problème notamment pour les déficients visuel. Mais bon on finit par s'y habituer. De plus il existe déja de nombreuse captcha. Ah et au fait l'attribut alt n'est pas là pour faire joli. ;)
WanaDien
Messages postés
7
Date d'inscription
lundi 13 janvier 2003
Statut
Membre
Dernière intervention
28 mai 2007
-
Maxroucoul : Ouais pour les polices je suis d'accord, mais c'était les seules que je trouvais "gommées" donc plus difficile à détecter pour les robots, mais après chacun à le choix de prendre la police qu'il souhaite :)

Wizad : Oui pour le visuel je suis d'accord, c'est pour ça que quand j'aurai le temps, je ferrai une version audio, cependant la police peut être changer là, c'est pas très difficile ....
Je met rien dans l'attribut alt car ça sert à rien de préciser que c'est l'image du code a recopié, étant donné que quand le formulaire en général tu mets "Recopier le code si dessous" et que l'image tu l'as met en dessous ... Après chacun est libre de mettre ou pas un commentaire au passage de la souris sur l'image.
Et si je supprime l'attribut alt, ce n'est plus valide en xhtml strict.


Cordialement. Sullivan.
cs_wizad
Messages postés
356
Date d'inscription
samedi 30 octobre 2004
Statut
Membre
Dernière intervention
14 avril 2009
-
bon je vais chipoter un peu : un fichier xhtml strict nécéssite que tous les attributs alt soit présent et correctement remplis. Pour une raison toute bete : il arrive pour n'importe quel raison d'être amené à utiliser des navigateur en mode text. Il est toujours intérréssant de savoir qu'il s'agit d'une captcha (et d'ailleur qu'il vaux mieux chercher un autre site vu qu'on pourra pas lire l'image).
WanaDien
Messages postés
7
Date d'inscription
lundi 13 janvier 2003
Statut
Membre
Dernière intervention
28 mai 2007
-
lol, tu cherches vraiment la petite bête :p
Mais même s'il n'y a rien dans le contenu de "alt", ça reste valide xhtml strict, donc c'est qu'il n'y a pas de soucis.
Dans un formulaire tu précises : "recopier le code dans l'image si dessous", donc tu as pas besoin de rajouter que l'image est une captcha, car c'est préciser au dessus, que tu sois sur un navigateur en text ou pas. Après chacun son avis.
Le champs alt, personnellement, je le remplis quand je précise rien sur l'image, sinon ça fait trop, et j'aime pas ><, après si vraiment c'est obligatoire à 100% de préciser, bah je le ferrai, mais personne m'en avait fait la remarque, ni même mes profs, donc, j'ai conclus que ce n'était pas grave de rien préciser dans le alt.

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.