Autor Tema: [!TUT][GD] Captcha para tu web. by Focux  (Leído 1038 veces)

Desconectado Focux

  • PHPero Master
  • ******
  • Mensajes: 1.010
  • Karma: 22
    • Ver Perfil
[!TUT][GD] Captcha para tu web. by Focux
« en: 07 de Enero de 2010, 15:19:45 pm »
Bueno hoy les voy a enseñar a hacer un captcha desde 0, lo unico que vamos a necesitar es la imagen en donde estaran las letras y esta fuente http://focux.es/visitor.ttf, por mi parte yo usare esta imagen:


Ahora vamos a la parte del código que es lo que voy a explicarles.
Citar
<?php
session_start
(); //Inicializamos la session, mas alante veran para que usaremos esto.
$array = Array("PHPeros","Naveda","Focux","westwest"); //Hacemos un array con lo que quieras.
shuffle($array); //Cambiamos el orden del array.
$_SESSION[&#39;code&#39;] = substr(md5(sha1($array[0])),rand(0,20),6); //Ahora en la session metemos la palabra que salio en el array comprimida en md5 y en hash, luego extraemos al azar 6 palabras.
Header("Content-type: image/png"); //Sin esto no se muestra la imagen
$focux imagecreatefrompng("captcha.PNG"); //Cargamos la imagen que escogimos mas arriba.
$color imagecolorallocate($focux,rand(0,255),rand(0,255),rand(0,255)); //Le ponemos un  color negro a las letras
imagettftext($focux,20,0,23,32,$color,"visitor.ttf",$_SESSION[&#39;code&#39;]); //Escribimos el codigo en la imagen
imagepng($focux); //Mostramos la imagen
imagedestroy($focux); //Liberamos
?>
Resultado:http://focux.es/captcha.php

Para ponerlo en sus formularios lo que deben hacer es colocar un input tipo text en donde ponga el codigo que ven en la imagen, para colocar la imagen deben poner <img src="captcha.php" alt="captcha"> y para comprobar usan lo siguiente. Antes de hacer esto debes inicializar la session con session_start().
<?=($_SESSION[&#39;code&#39;] == $_POST[&#39;algo&#39;]) ? &#39;El codigo esta correcto&#39; : &#39;El codigo no esta correcto&#39;;
« Última modificación: 11 de Enero de 2010, 20:07:28 pm por Focux »
Mixtiqueros.net

<?PHP
define
(_miNombre, &#39;Focux&#39;);
if(_miNombre == &#39;Focux&#39;): printf(&#39;%s es un programador avanzado&#39;, _miNombre); else: printf(&#39;Tu no eres %s&#39;, _miNombre); endif;
?>

Comunidad PHPeros

[!TUT][GD] Captcha para tu web. by Focux
« en: 07 de Enero de 2010, 15:19:45 pm »

Desconectado westwest

  • PHPero Master
  • ******
  • Mensajes: 2.837
  • Karma: 104
  • Sexo: Masculino
    • Ver Perfil
Re:[!TUT][GD] Captcha para tu web. by Focux
« Respuesta #1 en: 07 de Enero de 2010, 16:29:51 pm »
Lol salgo yo xD ^^

Esta bien el captcha, aunque es recomendable poner alguna linea para despistar a los bots

Desconectado Focux

  • PHPero Master
  • ******
  • Mensajes: 1.010
  • Karma: 22
    • Ver Perfil
Re:[!TUT][GD] Captcha para tu web. by Focux
« Respuesta #2 en: 07 de Enero de 2010, 17:00:03 pm »
Lol salgo yo xD ^^

Esta bien el captcha, aunque es recomendable poner alguna linea para despistar a los bots
Listo, ya puse algunas lineas a ver que tal les va con los bots xd.
Mixtiqueros.net

<?PHP
define
(_miNombre, &#39;Focux&#39;);
if(_miNombre == &#39;Focux&#39;): printf(&#39;%s es un programador avanzado&#39;, _miNombre); else: printf(&#39;Tu no eres %s&#39;, _miNombre); endif;
?>

Desconectado Tope

  • PHPero Experto
  • *****
  • Mensajes: 540
  • Karma: 23
  • Sexo: Masculino
  • Programador PHP
    • Ver Perfil
    • www.Info-Keko.Es
Re:[!TUT][GD] Captcha para tu web. by Focux
« Respuesta #3 en: 07 de Enero de 2010, 21:51:27 pm »
Eso es igual que si le pones el "captcha" en texto plano.

Como mínimo, pon las líneas sobre las letras, pero aun así será sencillo (aunque yo no sepa saltarme ese captcha).

Podrías poner las líneas cada vez de un color, y en sitios distintos, diferentes horientaciones.. simplemente usa varios rand().

Saludos
Un Saludo, Tope >> Programador FIJO en PHPeros

Desconectado Focux

  • PHPero Master
  • ******
  • Mensajes: 1.010
  • Karma: 22
    • Ver Perfil
Re:[!TUT][GD] Captcha para tu web. by Focux
« Respuesta #4 en: 11 de Enero de 2010, 20:09:40 pm »
Eso es igual que si le pones el "captcha" en texto plano.

Como mínimo, pon las líneas sobre las letras, pero aun así será sencillo (aunque yo no sepa saltarme ese captcha).

Podrías poner las líneas cada vez de un color, y en sitios distintos, diferentes horientaciones.. simplemente usa varios rand().

Saludos
Listo, le puso algunos rand() para tornar los colores y despistar a los bot.
Mixtiqueros.net

<?PHP
define
(_miNombre, &#39;Focux&#39;);
if(_miNombre == &#39;Focux&#39;): printf(&#39;%s es un programador avanzado&#39;, _miNombre); else: printf(&#39;Tu no eres %s&#39;, _miNombre); endif;
?>

Desconectado chihue

  • PHPero Master
  • ******
  • Mensajes: 1.118
  • Karma: 43
  • Sexo: Masculino
  • 8 dias
    • Ver Perfil
    • Minichat con todo incluido
Re:[!TUT][GD] Captcha para tu web. by Focux
« Respuesta #5 en: 14 de Enero de 2010, 22:36:37 pm »
Muy bueno i como hago la comprobación
Bueno hoy les voy a enseñar a hacer un captcha desde 0, lo unico que vamos a necesitar es la imagen en donde estaran las letras y esta fuente http://focux.es/visitor.ttf, por mi parte yo usare esta imagen:


Ahora vamos a la parte del código que es lo que voy a explicarles.Resultado:http://focux.es/captcha.php

Para ponerlo en sus formularios lo que deben hacer es colocar un input tipo text en donde ponga el codigo que ven en la imagen, para colocar la imagen deben poner <img src="captcha.php" alt="captcha"> y para comprobar usan lo siguiente. Antes de hacer esto debes inicializar la session con session_start().
<?=($_SESSION[&#39;code&#39;] == $_POST[&#39;algo&#39;]) ? &#39;El codigo esta correcto&#39; : &#39;El codigo no esta correcto&#39;;

Desconectado Focux

  • PHPero Master
  • ******
  • Mensajes: 1.010
  • Karma: 22
    • Ver Perfil
Re:[!TUT][GD] Captcha para tu web. by Focux
« Respuesta #6 en: 15 de Enero de 2010, 00:48:02 am »
Con la $_SESSION['code'] que es que contiene el codigo, recuerda que antes de verificar debes haber inicializado session_start();
Mixtiqueros.net

<?PHP
define
(_miNombre, &#39;Focux&#39;);
if(_miNombre == &#39;Focux&#39;): printf(&#39;%s es un programador avanzado&#39;, _miNombre); else: printf(&#39;Tu no eres %s&#39;, _miNombre); endif;
?>