Function captcha----------------
Url     : http://codes-sources.commentcamarche.net/source/44843-function-captchaAuteur  : waterw72Date    : 02/08/2013
Licence :
=========

Ce document intitul  Function captcha  issu de CommentCaMarche
(codes-sources.commentcamarche.net) est mis  disposition sous les termes de
la licence Creative Commons. Vous pouvez copier, modifier des copies de cette
source, dans les conditions fixes par la licence, tant que cette note
apparat clairement.

Description :
=============

Cette fonction permet de cr&eacute;er une image PNG contenant des caract&egrave;
res
<br />g&eacute;n&eacute;r&eacute;s de fa&ccedil;on al&eacute;atoire.
<br /
>
<br />Cela permet de v&eacute;rifier qu'un formulaire est rempli par une pers
onne et non par un robot.
<br /><a name='source-exemple'></a><h2> Source / Exem
ple : </h2>

<br /><pre class='code' data-mode='basic'>
&lt;?php
	/**

<ul>
	<li> @name captcha
</li>	<li> Afficher  une image avec 5 caractres gnr al
atoirement.
</li>	<li> 
</li>	<li> @param Numeric iNbCaract : nombre de caract
re
</li>	<li> @param Array aTextColor : Code couleur(RGB) spar par des virgu
les de la couleur du texte.
</li>	<li> @param Array aBgColor : Code couleur(RGB
) spar par des virgules de la couleur de fond.
</li>	<li> @param Array aBorde
rColor : Code couleur(RGB) spar par des virgules de la couleur de bordure.</li
></ul>
	*

<ul>	<li> @return Image l'image cre.
</li>	<li>/</li></ul>
	
	
function captcha ($iNbCaract,$aTextColor, $aBgColor, $aBorderColor ) {
		//vri
fication d'existance de la fonction
		if ( !function_exists('imagecreatetruecol
or') ){
			return false;
		}

		//test des paramtres
		if (!is_int($iNbCar
act))
			$iNbCaract = 5;
			
		
		if ( is_array($aTextColor) &amp;&amp; coun
t($aTextColor)=== 3 ){ // si c'est un tableau de 3 
			for($i=0; $i&lt;3;$i++){

				if ( $aTextColor[$i] &lt; 0 || $aTextColor[$i] &gt; 255 ){ // si ce n'est 
pas compris entre 0 et 255
					$aTextColor[$i] = 0; // on met  zro = blanc

				} 
			}
		}else { // c'est pas un tableau de 3
			$aTextColor = array(0,0
,0);		
		}

		if ( is_array($aBgColor) &amp;&amp; count($aBgColor)=== 3 ){ //
 si c'est un tableau de 3 
			for($i=0; $i&lt;3;$i++){
				if ( $aBgColor[$i] 
&lt; 0 || $aBgColor[$i] &gt; 255 ){ // si ce n'est pas compris entre 0 et 255
	
				$aBgColor[$i] = 255; // on met  255 = noir
				} 
			}
		}else { // c'es
t pas un tableau de 3
			$aBgColor = array(255,255,255);		
		}
		
		if ( is_
array($aBorderColor) &amp;&amp; count($aBorderColor)=== 3 ){ // si c'est un tabl
eau de 3 
			for($i=0; $i&lt;3;$i++){
				if ( $aBorderColor[$i] &lt; 0 || $aB
orderColor[$i] &gt; 255 ){ // si ce n'est pas compris entre 0 et 255
					$aBor
derColor[$i] = 0; // on met  zro = blanc
				} 
			}
		}else { // c'est pas
 un tableau de 3
			$aBorderColor = array(0,0,0);		
		}		
		//fin test des pa
ramtres
			
		//variables
		$iWidth = $iNbCaract * 20;
		$iHeight = 27;
		
$iFontSize = 5; // de 1  5
		$sRep = &quot;./captcha/&quot;;
		//fin variable
s
					
		//chiffre
		$aCaractere = array();
		for ($i=0; $i&lt;=9; $i++) 

			$aCaractere[]  = $i;
		//majuscule
		for ($i=65; $i&lt;=90; $i++) 
			$aCa
ractere[] = chr($i);
		//minuscule
		for ($i=97; $i&lt;=122; $i++) 
			$aCara
ctere[] = chr($i);
				
		//texte alatoire
		$sTexte = &quot;&quot;;
		$sTe
xteImg = &quot;&quot;;
		$iLenCaractere = sizeof($aCaractere)-1;
		for ($cpt=0
;$cpt&lt;$iNbCaract;$cpt++) {
			$iNum_caract=rand(0, $iLenCaractere );
			$sT
exte .= $aCaractere[$iNum_caract];
			$sTexteImg .= $aCaractere[$iNum_caract] .
 &quot; &quot;;
		}
					
		//enregistrement du texte dans la session
		$_SE
SSION['captcha'] = $sTexte;
				
		//cration d'une image
		$rImage = imagecr
eatetruecolor ($iWidth, $iHeight);
		
		//couleur du texte
		if (count($aText
Color) === 3)
			$cText_color = imagecolorallocate ($rImage, $aTextColor[0], $a
TextColor[1], $aTextColor[2]);
				
		// couleur de fond
		if (count($aBgColo
r) === 3)
			$cBg_color = imagecolorallocate ($rImage, $aBgColor[0], $aBgColor[
1], $aBgColor[2]);
					
		// couleur de fond
		if (count($aBorderColor) === 
3)
			$cBorder_color = imagecolorallocate ($rImage, $aBorderColor[0], $aBorderC
olor[1], $aBorderColor[2]);
		
		// on dessine la bordure
		imagefilledrectan
gle($rImage, 0, 0, $iWidth, $iHeight,$cBorder_color);
		imagefilledrectangle($r
Image, 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); //IM
G_FILTER_EMBOSS, IMG_FILTER_SMOOTH
		
		// Rotation
		$rImage = imagerotate($
rImage, 5, $cBg_color);
		
		return imagepng($rImage);
		
		imagedestroy ($r
Image);
	}
	
?&gt;
</pre>
