<p class="imagen_derecha"> </p> <p class="imagen_derecha"><img src="http://farm5.static.flickr.com/4012/4609559601_a46e9db93c_o.png" alt="" /></p> <p>Llevo muchos años combatiendo la <strong>inmoralidad de las técnicas del SPAM</strong> con varios métodos y el que te presentaré a continuación es el más efectivo que he creado.</p> <p>La efectividad de este captcha se basa en el giro de las letras o números más la dirección en que indica una flecha.</p> <p>El hecho de que haya que introducir un código ya evita gran parte de los robot de SPAM, pero en el otro porcentaje se utilizan técnicas de un nivel superior, como un software OCR (pueden reconocer carácteres a partir de las imágenes). Contra estos, ya es más difícil vencerlos, pues pensábamos que sólo el ojo humano podía reescribir el texto de una imagen, entonces, necesitamos introducir otro elemento que no tienen los robots: la <strong>capacidad de razonar</strong>.</p> <p>Es justamente lo que hace este y otros buenos captchas: Te induce a pensar y escribir.</p> <p>Creo que un poco más fácil de descifrar que los que tienen letras muy distorsionadas como en los ejemplos de la imagen.</p> <h2>Integrar el captcha en el código PHP</h2> <p>El código PHP está creado con la <a href="http://php.net/manual/es/book.image.php">librería GD</a> del mismo PHP (si ya tienes instalado PHP, no necesitas instalar nada adicional).</p> <p>Primero, necesitamos el código que crea la imagen independiente con caracteres aleatorios (cada carácter, es una imagen) en posiciones especificas:</p> <pre class="codigo"><span class="c1"><span class="c2"><span class="c3"><span class="c4"><span class="c5"><?php<br /><br />// cabecera<br />header("Content-type: image/png");<br /><br />// crear la imagen (anchura,altura)<br />$img=imageCreate(100,60);<br /><br />// colores<br />$blanco=imagecolorallocate($img,255,255,255);<br />$negro=imagecolorallocate($img,0,0,0);<br /><br />// variables obtenidas por GET<br /><br />$sentido=rand(1,2);<br /><br />$tcaptcha=$_GET['captcha'];<br />$tcaptcha=base64_decode($tcaptcha);<br />$tcaptcha=substr($tcaptcha,1,-1);<br />$tcaptcha=base64_decode($tcaptcha);<br /><br />$caracter1=substr($tcaptcha,0,1);<br />$caracter2=substr($tcaptcha,1,1);<br />$caracter3=substr($tcaptcha,2,1);<br />$caracter4=substr($tcaptcha,3,1);<br />$caracter5=substr($tcaptcha,4,1);<br /><br /><br />if($sentido==1){<br />// flecha<br />$string=imagecopy($img,imagecreatefrompng('flecha1.png'),31,26,0,0,40,30);<br /><br />// caracteres<br />$string=imagecopy($img,imagerotate(imagecreatefrompng("caracteres_0/$caracter1.png"),90,$blanco,0),3,36,0,0,22,22);<br />$string=imagecopy($img,imagerotate(imagecreatefrompng("caracteres_45/$caracter2.png"),0,$blanco,0),13,12,0,0,22,22);<br />$string=imagecopy($img,imagerotate(imagecreatefrompng("caracteres_0/$caracter3.png"),0,$blanco,0),39,0,0,0,22,22);<br />$string=imagecopy($img,imagerotate(imagecreatefrompng("caracteres_45/$caracter4.png"),270,$blanco,0),65,12,0,0,22,22);<br />$string=imagecopy($img,imagerotate(imagecreatefrompng("caracteres_0/$caracter5.png"),270,$blanco,0),75,36,0,0,22,22);<br />}<br />if($sentido==2){<br />// flecha<br />$string=imagecopy($img,imagecreatefrompng("flecha2.png"),31,6,0,0,40,30);<br /><br />// caracteres<br />$string=imagecopy($img,imagerotate(imagecreatefrompng("caracteres_0/$caracter1.png"),270,$blanco,0),8,6,0,0,22,22);<br />$string=imagecopy($img,imagerotate(imagecreatefrompng("caracteres_45/$caracter2.png"),270,$blanco,0),14,31,0,0,22,22);<br />$string=imagecopy($img,imagerotate(imagecreatefrompng("caracteres_0/$caracter3.png"),0,$blanco,0),39,36,0,2,22,20);<br />$string=imagecopy($img,imagerotate(imagecreatefrompng("caracteres_45/$caracter4.png"),0,$blanco,0),64,31,0,0,22,22);<br />$string=imagecopy($img,imagerotate(imagecreatefrompng("caracteres_0/$caracter5.png"),90,$blanco,0),70,6,0,0,22,22);<br /><br />}<br /><br /><br />// mostrar la imagen<br />echo imagegif($img);<br /><br />// destruir la imagen<br />imagedestroy($img);<br />?><br /></span></span></span></span></span></pre> <p>(libreria-captcha/imagen.php)</p> <p>Luego, el archivo donde vamos a generar la clave aleatoria y que incluirá el código anterior, es decir, donde se encontrarán todas las variables que necesitemos:</p> <pre class="codigo"><span class="c1"><span class="c2"><span class="c3"><span class="c4"><span class="c5"><?php<br /><br />$abcnumeros=array(0,1,2,3,4,5,6,7,8,9,"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");<br /><br />$caracter1=$abcnumeros[rand(0,35)];<br />$caracter2=$abcnumeros[rand(0,35)];<br />$caracter3=$abcnumeros[rand(0,35)];<br />$caracter4=$abcnumeros[rand(0,35)];<br />$caracter5=$abcnumeros[rand(0,35)];<br /><br />$captcha=$caracter1.$caracter2.$caracter3.$caracter4.$caracter5;<br /><br />// codificacion propia<br />$captcha_cod=base64_encode($captcha);<br />$captcha_cod="a".$captcha_cod."E";<br />$captcha_cod=str_replace("=","",$captcha_cod);<br />$captcha_cod=base64_encode($captcha_cod);<br /><br />$tu_captcha=md5(strtolower($_POST['tu_captcha']));<br />$mi_captcha=$_POST['mi_captcha'];<br /><br />// variables con HTML<br />$img_captcha='<label for="captcha"><img src="libreria-captcha/imagen.php?captcha='.$captcha_cod.'" alt="Captcha" title="El código de verificación o captcha permite verificar si eres un humano o una máquina de SPAM" /></label>';<br />$input_captcha='<input type="text" name="tu_captcha" id="captcha" size="10" /><input type="hidden" name="mi_captcha" value="'.md5($captcha).'" />';<br /><br />?></span></span></span></span></span></pre> <p>(libreria-captcha/variables.php)</p> <p>Por último, en el formulario HTML de una página cualquiera, donde queremos integrar el captcha necesitamos incluir a las variables (variables.php) e imprimir la varible que contiene el html de la imagen ($img_captcha) y la que tiene el campo donde se debe ingresar el capcha ($input_captcha).</p> <pre class="codigo"><span class="c1"><span class="c2"><span class="c3"><span class="c4"><span class="c5"><?php<br /><br />include('libreria-captcha/variables.php');<br /><br />echo "<p>".$img_captcha."</p>";<br />echo "<p>".$input_captcha."</p>";<br /><br />?></span></span></span></span></span></pre> <p>Luego, solo faltaría tu código, en el cual puedes verificar si el código de verificación está correctamente escrito o no de la siguiente forma:</p> <pre class="codigo"><span class="c1"><span class="c2"><span class="c3"><span class="c4"><span class="c5"><?php<br /><br />if($mi_captcha==$tu_captcha){<br /> // Aquí incluyes tu código si es que el captcha se pasa exitosamente. <br />}else{<br /> // Aquí incluyes tu código si es que el captcha NO se pasa exitosamente.<br />}<br /><br />?><br /></span></span></span></span></span></pre> <p>Las variables son enviadas por 2 medios codificados: md5 y uno creado por mi que usa base 64.</p> <h2>Vea el captcha en funcionamiento.</h2> <ul> <li> <a href="archivos/captcha.zip">Descarga el código</a>, dentro del comprimido hay un ejemplo de uso.</li> <li><a href="ejemplos/captcha/">Ejemplo de demostración del captcha</a>.</li> </ul>
o salir
¡Amigo! te demorarás 10 segundos en crear tu cuenta.
Crear cuenta o acceder
Nick o e-mail Es el nombre visible de tu cuenta y te servirá para acceder a ella. Permitido espacios y cualquier caracter.
Contraseña Una clave única para acceder a tu cuenta.
Transcribe el código en la dirección indicada con el fin de evitar el SPAM.
Identificación Tu identificación es el nick o el e-mail de tu cuenta.
Contraseña La clave de tu cuenta. ¿No la recuerdas?
Recordar por diez días
Disfrutarás de todos los beneficios de DocumentoWeb.
Twitter Facebook Feed RSS
www.DocumentoWeb.com - Licencia Creative Commons