Function captcha

Soyez le premier à donner votre avis sur cette source.

Vue 11 902 fois - Téléchargée 716 fois

Description

Cette fonction permet de créer une image PNG contenant des caractères
générés de façon aléatoire.

Cela permet de vérifier qu'un formulaire est rempli par une personne et non par un robot.

Source / Exemple :


<?php
	/**

  • @name captcha
  • Afficher une image avec 5 caractères généré aléatoirement.
  • @param Numeric iNbCaract : nombre de caractère
  • @param Array aTextColor : Code couleur(RGB) séparé par des virgules de la couleur du texte.
  • @param Array aBgColor : Code couleur(RGB) séparé par des virgules de la couleur de fond.
  • @param Array aBorderColor : Code couleur(RGB) séparé par des virgules de la couleur de bordure.
*
  • @return Image l'image crée.
  • /
function captcha ($iNbCaract,$aTextColor, $aBgColor, $aBorderColor ) { //vérification d'existance de la fonction if ( !function_exists('imagecreatetruecolor') ){ return false; } //test des paramètres if (!is_int($iNbCaract)) $iNbCaract = 5; if ( is_array($aTextColor) && count($aTextColor)=== 3 ){ // si c'est un tableau de 3 for($i=0; $i<3;$i++){ if ( $aTextColor[$i] < 0 || $aTextColor[$i] > 255 ){ // si ce n'est pas compris entre 0 et 255 $aTextColor[$i] = 0; // on met à zéro = blanc } } }else { // c'est pas un tableau de 3 $aTextColor = array(0,0,0); } if ( is_array($aBgColor) && count($aBgColor)=== 3 ){ // si c'est un tableau de 3 for($i=0; $i<3;$i++){ if ( $aBgColor[$i] < 0 || $aBgColor[$i] > 255 ){ // si ce n'est pas compris entre 0 et 255 $aBgColor[$i] = 255; // on met à 255 = noir } } }else { // c'est pas un tableau de 3 $aBgColor = array(255,255,255); } if ( is_array($aBorderColor) && count($aBorderColor)=== 3 ){ // si c'est un tableau de 3 for($i=0; $i<3;$i++){ if ( $aBorderColor[$i] < 0 || $aBorderColor[$i] > 255 ){ // si ce n'est pas compris entre 0 et 255 $aBorderColor[$i] = 0; // on met à zéro = blanc } } }else { // c'est pas un tableau de 3 $aBorderColor = array(0,0,0); } //fin test des paramètres //variables $iWidth = $iNbCaract * 20; $iHeight = 27; $iFontSize = 5; // de 1 à 5 $sRep = "./captcha/"; //fin variables //chiffre $aCaractere = array(); for ($i=0; $i<=9; $i++) $aCaractere[] = $i; //majuscule for ($i=65; $i<=90; $i++) $aCaractere[] = chr($i); //minuscule for ($i=97; $i<=122; $i++) $aCaractere[] = chr($i); //texte aléatoire $sTexte = ""; $sTexteImg = ""; $iLenCaractere = sizeof($aCaractere)-1; for ($cpt=0;$cpt<$iNbCaract;$cpt++) { $iNum_caract=rand(0, $iLenCaractere ); $sTexte .= $aCaractere[$iNum_caract]; $sTexteImg .= $aCaractere[$iNum_caract] . " "; } //enregistrement du texte dans la session $_SESSION['captcha'] = $sTexte; //création d'une image $rImage = imagecreatetruecolor ($iWidth, $iHeight); //couleur du texte if (count($aTextColor) === 3) $cText_color = imagecolorallocate ($rImage, $aTextColor[0], $aTextColor[1], $aTextColor[2]); // couleur de fond if (count($aBgColor) === 3) $cBg_color = imagecolorallocate ($rImage, $aBgColor[0], $aBgColor[1], $aBgColor[2]); // couleur de fond if (count($aBorderColor) === 3) $cBorder_color = imagecolorallocate ($rImage, $aBorderColor[0], $aBorderColor[1], $aBorderColor[2]); // on dessine la bordure imagefilledrectangle($rImage, 0, 0, $iWidth, $iHeight,$cBorder_color); imagefilledrectangle($rImage, 1, 1, $iWidth-2, $iHeight-2,$cBg_color); // on écrit le texte imagestring ($rImage, $iFontSize, 10, 5, $sTexteImg, $cText_color); // on brouille l'image : floue imagefilter($rImage, IMG_FILTER_SMOOTH, 2); //IMG_FILTER_EMBOSS, IMG_FILTER_SMOOTH // Rotation $rImage = imagerotate($rImage, 5, $cBg_color); return imagepng($rImage); imagedestroy ($rImage); } ?>

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

coucou747
Messages postés
12336
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
29 -
certains sont facilement cassables, d'autres non, persnellement, j'aime bien le captcha de bashfr parce-qu'il est tres difficile de differencier deux lettres
darkturkey
Messages postés
2
Date d'inscription
lundi 12 juin 2006
Statut
Membre
Dernière intervention
3 décembre 2007
-
vu ce que t'as fait comme algorithme pour craquer les captchas images je te crois sur parole et je laisse tomber les captchas questions sur le champ :)

j'ai trouvé http://www.cryptographp.com/ quand je regarde le code (j'ai pas tout compris, j'essaye encore), tu vas le casser en 30 minutes

alors, que faire ?
coucou747
Messages postés
12336
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
29 -
les deux methodes ne se vallent pas non... suffit de tenter de hacker l'une et l'autre pour s'en rendre compte... le captcha texte dont tu parle resiste dans les 10 minutes... un bon captcha image, perso jen e tenterais pas...
darkturkey
Messages postés
2
Date d'inscription
lundi 12 juin 2006
Statut
Membre
Dernière intervention
3 décembre 2007
-
Bonjour,

je ne suis pas un expert en php, j'ai fait captcha "combien font 1 p.l.u.s. 6" avec 1 et 6 des rand(1,10), et jusqu'à aujourd'hui je pensais que c'était la même chose que les images sachant que les 2 méthodes peuvent être casser par les robots.

avez-vous des sites tutoriels pour m'expliquer pourquoi les captchas images qui sont gourmands en ressources, pas adapté au grand public(mal voyant,mal entendant...) et qui sont cassables aussi et meilleur que les captchas questions ? D'après mes recherches les 2 méthodes se valent, mais comme j'ai dit je suis pas un expert et j'aimerais avoir votre avis...

merci
cs_NEVERFORGET
Messages postés
21
Date d'inscription
dimanche 10 octobre 2004
Statut
Membre
Dernière intervention
23 juin 2008
-
Si mon captcha t'intéresse, fais-moi signe.
Il est pas de moi et je sais plus où je l'avais trouvé mais je t'envoie volontiers le script.
Tu peux le voir à cette adresse : http://www.souriredeboncoeur.com/form/commande.php

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.