Crear CAPTCHA con PHP

Captcha es una palabra aleatoria y en ocasiones distorsionada mostrada como imagen que se utiliza para evitar que los robots accedan a determinadas web. Este tipo de verificación es utilizada por los programadores para evitar el spam en lo blogs por ejemplo.

captcha.gif

La idea básica para crear un Captcha es generar primero un texto aleatorio, luego basado en este texto generamos una imagen la cual se muestra al usuario, finalmente se compara el texto ingresado por el usuario con la palabra aleatorio generada.

Generar el Captcha
La primero es crear una imagen con un texto aleatorio, para ello un archivo llamado captcha.php el cual creará dinámicamente el texto. Para ello creamos una función llamada randomText que se encarga de generar una cadena de texto aleatorio, acepta un parámetro el cual le indica cuantos caracteres puede tener el texto generado.

php
  1. // archivo: captcha.php
  2. function randomText($length) {
  3.     $pattern = "1234567890abcdefghijklmnopqrstuvwxyz";
  4.     for($i=0;$i<$length;$i++) {
  5.       $key .= $pattern{rand(0,35)};
  6.     }
  7.     return $key;
  8. }

Lo siguiente es crear una variable de sesión para guardar el texto generado, luego de ello tomamos una imagen que contiene el fondo para el captcha en nuestro caso la imagen es bgcaptcha.gif, luego creamos el texto sobre esta imagen para luego mostrarla en el navegador como imagen enviándole un header indicando el tipo de archivo.

php
  1. session_start();
  2. $_SESSION['tmptxt'] = randomText(8);
  3. $captcha = imagecreatefromgif("bgcaptcha.gif");
  4. $colText = imagecolorallocate($captcha, 0, 0, 0);
  5. imagestring($captcha, 5, 16, 7, $_SESSION['tmptxt'], $colText);
  6. header("Content-type: image/gif");
  7. imagegif($captcha);

Crear el formulario para verificar el Captcha
Lo siguiente es mostrar la imagen generado para que el usuario pueda leerlo e ingresar el texto en el formulario para ser verificado. Naturalmente esta verificación será parte de un formulario mucho mas grande pero solo incluimos un campo para propósitos de ejemplo. Esto lo incluimos en el archivo captchademo.php, note que al incluir la imagen hemos colocado la ruta al php que genera la imagen.

HTML4
  1. Ingresar el texto mostrado en la imagen <br>
  2. <form action="captchademo.php" method="post">
  3.   <img src="captcha.php" width="100" height="30"><br>
  4.   <input name="tmptxt" type="text"><br>
  5.   <input name="btget" type="submit" value="Verificar Codigo">
  6.   <input name="action" type="hidden" value="checkdata">
  7. </form>

Verificar el texto Ingresado
Lo siguiente es verificar el texto ingresado en el formulario y compararlo con la variable $_SESSION['tmptxt'] que contiene el texto generado aleatoriamente. Para ello verificamos que se haya enviado el formulario y luego comparamos el texto ingresado con el texto que tenemos en la variable de sesión.

php
  1. session_start();
  2. if ($_POST['action'] == "checkdata") {
  3.     if ($_SESSION['tmptxt'] == $_POST['tmptxt']) {
  4.         echo "Bienvenido";
  5.     } else {
  6.         echo "Inténtalo nuevamente";
  7.     }
  8.     exit;
  9. }

Ideas Adicionales
Nuestro ejemplo es sencillo, pero se puede mejorar esto por ejemplo dibujando lineas aleatorios con ángulos aleatorios sobre el texto, también se puede dibujar el texto con una inclinación aleatorio, también se pueden colocar cada letra con distintos ángulos de rotación y color. Con estos adicionales pueden lograr un Captcha mucho mas consistente y seguro.

Pueden ver el ejemplo funcionando en captchademo.php y también pueden descargar los archivos con las fuentes para que lo descarguen y prueben.

Comentarios Total 153 comentarios


caos30
Publicado: 22/08/2007 6:30 pm

Ahora acabaré de leer este buen post, me he quedado en el archivo captcha.php del cuál me ha encantado la sencillez de la función que defines para generar una cadena aleatoria. Llevo años utilizando otra bastante más complicada que me costó encontrar por ahí, que se basa en los códigos ASCII, y sinceramente, la tuya es de lejos mucho más elegante en cuanto a que es más sencilla pero muy potente.

Particularmente, para mi uso, le he hecho dos “mejoras”, que comparto aqui con vosotros: 1) usar la función mt_rand() en lugar de rand(), porque es más “fiable” y 4 veces más rápida (según doc oficial), 2) dar la posibilidad de llamar a la función pidiéndole cadenas aleatorias de 3 tipos (solo letras, solo numeros, letras y numeros).

function randomText($length,$type=0) {
switch ($type) {
case 0: $pattern = “1234567890abcdefghijklmnopqrstuvwxyz”; break;
case 1: $pattern = “abcdefghijklmnopqrstuvwxyz”; break;
case 2: $pattern = “1234567890″; break;
}
$max = strlen($pattern)-1;
for($i=0;$i

caos30
Publicado: 22/08/2007 6:32 pm

Perdón, la función se ha “truncado” por el signo “<”. La repito aquí:

function randomText($length,$type=0) {
switch ($type) {
case 0: $pattern = “1234567890abcdefghijklmnopqrstuvwxyz”; break;
case 1: $pattern = “abcdefghijklmnopqrstuvwxyz”; break;
case 2: $pattern = “1234567890″; break;
}
$max = strlen($pattern)-1;
for($i=0;$i < $length;$i++) $key .= $pattern{mt_rand(0,$max)};
return $key;
}

caos30
Publicado: 22/08/2007 7:13 pm

Muy bueno el post, y muy bien explicado. Me ha ayudado mucho ver lo fácil que es generar el gif :) y yo siempre pensando que era complicadisimo… jejeje

Si me lo permites, daré una alternativa a tu trabajo con sesiones (que nunca me ha gustado el tema este) para luego comprobar si la cadena introducida por el visitante coincide con la de la imagen.

El método que os propongo me parece mucho más sencillo y prácticamente infalible:

1.1- generamos una cadena aleatoria con mt_rand()
1.2- dibujamos un gif con esa cadena
1.3- encriptamos con md5() esa cadena
1.4- enviamos al visitante el formulario que contiene la imagen gif y un campo oculto con la cadena md5
2.1- el servidor recibirá la cadena escrita por el visitante y la cadena md5
2.2- encriptamos con md5() la cadena del visitante y vemos si coincide con la que iba oculta (correspondiente a la de la imagen)

Como veis, el proceso es practicamente el mismo que el de la comprobacion de logins en la mayoría de webs, en los que los paswords estan guardados en md5 en la BBDD.

No he utilizado hasta el momento este método, porque se me acaba de ocurrir, pero por de pronto me parece correcto. Pero se admiten réplicas ;)

caos30
Publicado: 22/08/2007 7:18 pm

Me faltó decir dos cosas:

1) para encriptar md5 en PHP:

$key_md5 = md5($key);

2) la función de encriptación md5, matemáticamente hablando es NO DESENCRIPTABLE, tan solo podría “reventarse por fuerza bruta” es decir probando trillones de combinaciones. Lo cuál en la práctica lo hace INDESCIFRABLE.

unijimpe
Publicado: 23/08/2007 6:46 am

Efectivamente como mencionas hay muchas formas para crear cadenas aleatorias y luego encriptarlas, en este caso use una forma sencilla para lograr la explicación centrada en la generación de la imagen, desde luego las ideas que has planteado servirán para que muchos visitantes mejoren sus aplicaciones.
Gracias.

Patricio
Publicado: 24/08/2007 7:23 am

Hola; Tengo una duda… si realizas el formulario en FLash no hay para que realizar CaptCha o sí¿?

unijimpe
Publicado: 26/08/2007 3:03 am

Yo creo que si, pues al hacer el envío lo recibe un archivo PHP el cual acepta los datos por método POST por ejemplo, entonces para utilizar el captcha, se puede hacer un loadMovie de la imagen para mostrarla al usuario.

Blas
Publicado: 30/08/2007 9:39 pm

Hola a todos. Tengo un problema con el archivo “captcha.php”. No me muestra la imagen. Me dice que no se puede mostrar la imagen porque contiene errores. No es ningún error PHP ni nada por el estilo. Y tengo instaladas las librerías GD. El caso es q he probado a tocar un poco el código y tampoco. Si alguien me puede ayudar se lo agradecería.

Un saludo

Blas
Publicado: 30/08/2007 10:10 pm

Hola de nuevo, ya he solucionado el problema. El caso era que los gifs y los pngs no los admite la librería GD que tengo instalada. Lo he hecho con JPG y funciona perfectamente.

Gracias y un saludo.

P.D. Cojonuda la captcha eh?

links for 2007-09-03 « D e j a m e S e r
Publicado: 03/09/2007 8:19 pm

[...] Crear CAPTCHA con PHP » unijimpe (tags: php) [...]

ismael
Publicado: 06/09/2007 4:47 am

no me sale la imajen y si pueden coloquen una descarga para eso de las librerias gd

Alatarcete
Publicado: 18/09/2007 4:55 pm

Muy buen artículo!!

Me ha venido muy bien. Muchas gracias por compartirlo ;)

Elver Aroquipa Vilca
Publicado: 18/09/2007 6:50 pm

Hola Amigos, esto es un muy ejemplo y saludos a todo los que comparten sus script en php ..

Joan
Publicado: 10/10/2007 2:44 am

Hola.

Me descargue el fichero d captcha pero no me escribe el codigo en la imagen y tmp me aparece la imagen.

K tengo k acer?
Agradeceria k me contestaran al mail si puede ser o sino x aki.

Gracias!!!

samuel
Publicado: 21/10/2007 1:47 am

Hola amigos, muy bueno lo que comentan ahora tengo una duda, el paso 1 y 2 no es nada de otro mundo se re entiende, el tema va en el paso 3 y 4, resulta que yo eso lo quiero aplicar dentro un formulario ya generado…

por ejemplo estoy preparando un site para una rentacar y en ella inclui un formulario para la contratacion, y alli entonces dentro de ese formulario quiero incluir el capcha…Como tengo que hacer en este caso, con el paso 3 y 4, podrian ayudarme, tengo msn por si alguno me da una mano.
sherrera@iguanaserver.com

Gracias y muy buen aporte…

addy
Publicado: 13/11/2007 4:08 pm

saludos quiero saver como crear un capsha para mi web no a sido posible

gracias

Marta Critins
Publicado: 14/01/2008 4:38 pm

hola no puedo hacerlo funcionar me da error

Cecik
Publicado: 08/02/2008 8:30 pm

Hola gracias por el script es de mucha ayuda, pero no se si estoy haciendo algo mal en pagina web por que no me aperece la imagen captcha.gif alguien me podria explicar? Gracias…

riverinyo
Publicado: 04/04/2008 2:56 am

Grande, grande!!!

Horas de curro que me acabo de saltar.
Muchas gracias por compartirlo!

Diego
Publicado: 08/04/2008 3:54 pm

Hola!
Che está muy bueno el código éste, funciona sin problemas.
Pensé que necesitaba la libreria gd o algo por el estilo, pero nada de eso.

Tuve unos problemas, pero los solucione.

Un Saludo grande.

SoloSalsero
Publicado: 15/04/2008 7:12 pm

Hola, estoy actualizando mi sitio web y estaba buscando algo práctico, sencillo pero útil como esto.

Muchas Gracias

no funciona
Publicado: 16/04/2008 12:47 am

cuando lo monte a un servidor directamente del archivo comprimido no funciona no SE VE LA IMAGEN ¿?..

Alvaro
Publicado: 05/05/2008 1:09 pm

Hola: genial tu artículo. Sólo una duda ¿por qué no lo has incorporado ha este formulario?.

Sergio
Publicado: 15/05/2008 3:04 am

Grácias por compartirlo con todos nosotros.

Sergio
Publicado: 15/05/2008 3:05 am

Un apunte, para que funcione correctamente en PHP5, he tenido que inicializar la variable $key=”".

Hugo
Publicado: 23/05/2008 1:52 pm

unijimpe:
Excelente blog y el temas además.
Tengo un directorio (lo he escrito en website), le agregué el captcha y funciona, si no agregas el código te dice Inténtalo nuevamente y si lo hacer correctamente, te la la bienvenida. Mi problema es que no agrega el enlace, que debo de hacer, o de que forma debo de insertar el captcha?
Puedes verlo funcionando en:

http://www.entiempolibre.m-y-c.net/suggest_link.php?cat=Internet_&sub_cat=Blogs

Desde ya muchas gracias.

unijimpe
Publicado: 23/05/2008 8:32 pm

Hugo, lo que debes hacer es cambiar la linea donde se imprime el mensaje de bienvenido:

echo “Bienvenido”;

Y reemplazarlo por un header que redireccione a una pagina de confirmación del registro o agregar el codigo que guarde los datos enviados.

Hugo
Publicado: 24/05/2008 12:21 am

unijimpe:
Mi problema es que no se como hacerlo, No tienes idea de lo que me costo ubicar donde ponerlo, con php spy un caso, voy adivinando. con lo del header estoy nulo, si no es mucha molestia, te agradecería me indicaras como.

Muchas gracias de antemano.

Rodrigo
Publicado: 27/05/2008 1:38 pm

Hola

Muy Buen ejemplo, pero hay algo que no entiendo, en vez de usar

antes intente con y me arrojaba el tipico error de headers, como es entonces que los headers se envian antes al usar

thanxs

nightduke
Publicado: 30/05/2008 4:17 pm

Me puedes ayudar no consigo que me funcione el captcha.

Muchas gracias.

yo
Publicado: 02/06/2008 7:21 am

Distingue MAYUSCULAS Y MINUSCULAS….

Jesus Neira
Publicado: 06/06/2008 10:43 am

Buenas, por favor me pueden guiar para solucionar el siguiente mensaje de error: Fatal error: Call to undefined function imagecreatefromgif(). Debo activar alguna librería, o tengo que configurar algo del conf?

freddy
Publicado: 09/06/2008 5:59 pm

holas me parece muy bueno el tema recien lo voy a probar pero dime se puede cambiar la fuente de las letras que salen en la imagen?

Jesus Neira
Publicado: 20/06/2008 4:40 pm

Buen día,

Ya encontre la solución, simplemente hay que instalar la librería GD en el servidor.

Gracias.

Matias
Publicado: 04/07/2008 9:19 am

Excelente la explicación. Lo implemente y logre evitar el ingreso de mensajes spam desde los formularios de contactos. Mi duda es respecto a un sistema de encuestas. Me pasa que varias veces alguna opcion se dispara porque evidentemente estan votando a traves de un robot (no se si intencionalmente o no…) ¿Es posible validar un voto en una encuesta a traves de un captcha? Si alguien sabe como, le agradeceria que me indique. Gracias, y saludos a todos.

Carlos-
Publicado: 31/07/2008 4:08 am

¡Eres mi idolo!

Te leo desde hace unas semanas y cada vez mas, hoy se dio el casual de que buscaba la manera de crear un captcha y captchuualidades de la vida encontré tu blog (por enesima vez cuando lo necesito).

Me encanta el estilo de la página y como lo explicas todo (para tonticos que estamos aprendiendo o que solo buscamos el código sin saber como funciona), creo que ya era hora de felicitarte por semejante web.

Un Saludo y me voy a probar este script!

Alejandro hdz.
Publicado: 05/08/2008 3:41 am

hola quue tal… soy nuevo en esto… he leido que es bueno eliminar las variables de sesion cuando ya no se usan por que son como una carga para el servidor… supongo que para cerrar la sesion o eliminar la variable de sesion lo hago justo despues de imprimir la bienvenida o me ekivoco??… y como algunos busco mandar un mail con un link de confirmación… pero siempre he tenido esta maldita duda…. asi como puedo mandar un mail de confirmacion a hotmail por ejemplo, como ellos no saben que mi intencion es mandar un spam?? no tendre ningun problema de mandar el link?? no esta restringido el envio de correo a hotmail desde un servidor localhost con dns gratutio registrado?? recuerdo que con mdaemon configure un servidor de correo y enviaba mails don un script php pero solo llegaba a yahoo a hotmail no llegaba… mmm.. de que depende esto??

Alejandro hdz.
Publicado: 05/08/2008 3:46 am

caos30… no se si tu codigo este bien…. veo que usas un switch para seleccionar una combinacion alfanuemerica, alfabetica o numerica… dependiendo el valor de $type… pero veo que siempre lo inicializas con cero… no sera que tu intencion es aplicarle un random a $type… $type=mt_rand(0,2); justo despues antes de que inicie el switch??

Alex
Publicado: 05/08/2008 2:53 pm

hice algo indebido?? ayer deje unos mensajes y ya no los veo… bueno ok. espero saber por que… ok. entiendo la funcion generadora pero entiendo poco el codigo que crea la variable de sesion… apartir de la linea del imagecreatefromgif… esta funcion por lo que lei crea una nueva imagen apartir de una archivo o un url…. pero como crea una imagen si lo que devuelve es un identificador??…. entonces es un identificador que representa o apunta a la imagen COPIA.. por que si crea una imagen apartir de otra entonces es una COPIA de la imagen..

Alex
Publicado: 05/08/2008 2:56 pm

otra cosa disculpen…. en el codigo zip veo que el formulario en su action tiene esto: action=”"…. que no se ni lo que signifique… y en este ejemplo de la pagina no sale asi solo dice action=”captchademo.php”… podrian explicarme… gracias… y disculpen si hice algo indebido en los post anteriores pero igual eran dudas y no podre resolverlas hasta que las encuentre por la web.. un saludo

Alex
Publicado: 05/08/2008 2:58 pm

una disculpa ya salieron los post… no se por que no habia aparecido en mi makina.. doy mucha lata… excelente blog..

Joseph
Publicado: 08/08/2008 1:43 pm

Hola….. excelente este tema… andaba buscando algo asi y tope con este… lo probe y me funciono de lo mas bien…

Ahora la pregutna que tengo es como puedo integrar/ agregar esto aun formulario de contactenos, he tratado pero no me da…

Cualquier ayuda se las agradecera….

nacho
Publicado: 27/08/2008 3:21 pm

hola estupendo scripth pero no me sale la imagen y no entiendo que hago mal ya que tengo un foro phpbb y si sale la imagen por lo que deduzco que tengo las librerias activados es que me servidor es gratis me ayudas.

Harold Lazo
Publicado: 05/09/2008 5:40 pm

Captcha mejorado con autorefresh por si el usuario no lo vé bien.

[CAPTCHA.PHP]
session_start();
function randomText($length, $type=0) {
switch ($type) {
case 0: $pattern = “1234567890abcdefghijklmnopqrstuvwxyz”; break;
case 1: $pattern = “abcdefghijklmnopqrstuvwxyz”; break;
case 2: $pattern = “1234567890″; break;
}
$max = strlen($pattern)-1;
for($i=0;$i < $length;$i++) $key .= $pattern{mt_rand(0,$max)};

return $key;
}

$_SESSION['tmptxt'] = randomText(5);

$captcha = imagecreatefromgif(“./images/bgcaptcha.gif”);
$colText = imagecolorallocate ($captcha, 0×00, 0×00, 0×00);
imagestring($captcha, 5, 20, 7, $_SESSION['tmptxt'], $colText);

header(“Content-type: image/gif”);
imagegif($captcha);

[FORMULARIO HTML]

Refrecar

[SCRIPT]
// funcion para actualizar captcha sin recargar la pagina

function actucap(){
var obj=document.getElementById(“cap”);
if (!obj) obj=window.document.all.cap;
if (obj){
obj.src= “captcha.php?” + Math.random() ;
}
}

Espero les sirva

Harold Lazo
Publicado: 05/09/2008 5:42 pm

el formulario ya que no salió

la imagen poner un <img id=”cap” …

y el link sería asi:

#refrescar

Harold Lazo
Publicado: 05/09/2008 5:43 pm

a href=javascript:actucap();

Miguel
Publicado: 24/10/2008 10:04 am

Mirar si os gusta este: Se puede implementar en ASP y en PHP, tiene efectos visuales en flash tiene un programa configurador que te da el codigo y es gratis.
http://www.icaptcha.com

Alvaro Grillet
Publicado: 06/11/2008 8:21 am

Excelente script, lo unicoq ue hay que cerciorarse que el GDlib esta activado como extension en el php.ini.

Por lo demas muy sencillo y limpio

Gracias

Elisa
Publicado: 19/11/2008 2:40 pm

Hola, me gusto mucho el script por su sencillez de su implementación, pero tengo un problema me funciona bien pero me sigue entrando correo basura por el formulario. Lo tengo igual al ejemplo, y no sé porque no funciona bien.

Muchas gracias

juanito
Publicado: 24/11/2008 8:06 pm

Hola, unijimpe. Hay una cosa que no entiendo en el proceso que has explicado al principio de este blog ¿el primer paso -el de la función- y el segundo -el de crear la imagen, cuando empiezas a usar la variable de sesión- se hacen en un mismo documento php o en distintos? En caso de que se hicieran en el mismo ¿cómo se haría? a mí no para de darme errores

mario
Publicado: 09/12/2008 5:30 pm

como puedo arreglarlo para que al meterle el codigo correcto me mande a una pagina?

alfa-flash
Publicado: 21/12/2008 8:29 pm

Excelente y sencilla forma de crear esta barrera contra los “spambots”. he sido victima (http://alfaflash.webcindario.com)de uno de ellos por eso he llegado a este link. De momento lo tengo en borrador afinando ultimos detalles y funciona perfectamente ( en webcindario ) Habra ke probarlo en terreno :). Voy a contestar a Mario
Mira lo que tienes ke hacer es muy simple . Habre el fichero captchademo.php que nos deja para descargar nuestro amigo unijimpe. cambia la siguente linea:
<form action=”" method=”post”> por lo siguiente

Es decir das la direccion de tu pagina.-

Luego corta la seccion php de este fichero, es decir =>

y lo colocas en tu pagina.php ( en la primera linea )

luego donde dice => echo “Bienvenido”;

colocaras todo el codigo de tu pagina. lo que deseas ke veamos si somos humanos. y en donde dice =>
echo “Intentalo nuevamente”; pues aki colocas un aviso advirtiendo ke se entro mal la serie de caracteres o algo similar .. suerte !!

alfa-flash
Publicado: 21/12/2008 8:35 pm

voy a remendar algunos errores del post anterior debido a ke los tag cortaron algunas lineas.

” ”

cambiar a :

” tupagina.php ”

Y bueno la seccion php es toda la primera parte del fichero captchademo.php

a ver si sale bn ahora.-

alfa-flash
Publicado: 21/12/2008 8:38 pm

jejejej lo ke no kiere salir es esto :
echo $_SERVER['PHP_SELF'];

habra ke agregar los tag php pertinentes y las comillas.-

slds.-

gafeman
Publicado: 25/12/2008 8:00 pm

buenissimo !!

aunque solo veo un pequeño fallo, inicializar la variable $key, dentro de:
function randomText($length) {
$key = ”;

lo usare en mi proximo proyecto, gracias ! :D

guillermo lombardi
Publicado: 03/01/2009 9:36 am

estimados estudiosos de los temas de formularios quisieran ayudarme con este problema !por favor¡
tengo un formulario que me genera el autoresponder el cual inserto en mi pagina web,el problema que este es vulnerable ,ahora mi pregunta es:¿puedo modificarlo agregandole un captcha o algo asi? para poder usar el autoresponde, si asi lo fuera, me podrian dar una mano yo les mando el script generado con el autoresponde:

Su Nombre:

Su E-Mail:

guillermo lombardi
Publicado: 03/01/2009 9:38 am

Su Nombre:

Su E-Mail:

joshua
Publicado: 11/02/2009 3:34 am

El sistema se puede simplificar más, sin utilizar imágenes, incorporando el código obtenido a un con hoja de estilos.
EL problema que puede pasar es que los robots buscan este tipo de cadenas para replicarlas en los input adyecentes, pero hay un truco.

Al input que tiene el código se le suma un especio en blanco delante y al final, como por ejemplo
” A9jTCb3 ”

En PHP, deberás validar que el usuario introduce únicamente “A9jTCb3″ ya que los especios se los sumas tú, por ello si algún robot replica el código lo hará con los espacios y no será válido.

joshua
Publicado: 11/02/2009 3:36 am

A un objeto INPUT con hoja de estilos

joshua
Publicado: 11/02/2009 3:43 am

Función inicializando el motor aleatorio

PHP:
1: function GeneraLlave($longitud) {
2: $pattern = “123Aa4Bb5Cc6Dd7Ee8Ff9″;
3: srand((double)microtime()*1000000);
4: for($i=0;$i<$longitud;$i++) {
5: $llave .= $pattern{rand(0,20)};
}
6: return $llave;
}

FRODO
Publicado: 11/03/2009 9:48 am

Lo que habría que instalar es un diccionario…

Nixs
Publicado: 21/03/2009 9:06 am

unijimpe tu siempre nos das una mano a nosotros los novatos, y nos salvas las papas del fuego

juan
Publicado: 29/03/2009 8:47 am

esta bueno

Alejandro
Publicado: 05/04/2009 8:59 pm

Como puedo convertir esto en un formulario, disculpen soy muy novato.

Como podria agrgarle mas campos y que al verificarse se enviara a un correo?

Me podrias orientar?

Paul
Publicado: 07/04/2009 2:08 am

Hola unijimpe:

Tengo un problema con las variables de session, el problema esta en que el captcha me genera la imagen gif, hasta ahi todo bien pero a la hora de hacer la comparacion entre la variable de session y lo que escribe el usuario me manda intentalo nuevamente, despues verifique imprimiendo la variable de session(echo $_SESSION(‘tmptxt’);) y cual fue mi sorpresa que no trae nada alguna de idea de que podra ser, en las dos paginas llamo a la funcion session_start();
si me pudieras auxiliar te lo agradeceria infinitamente.

Yatch
Publicado: 08/04/2009 2:41 pm

hola pss me sirvio de mucho pero ahora que cambie de appserver 2.5.7 a easyphp 3 la imagen no se ve porque?
y las librerias gd segun phpinfo estan activadas

maria
Publicado: 18/04/2009 12:42 pm

Ola soy Mariia y tengo 111111….111111111111…11. de msn conectadoo pzz
os quieroo!!!
si alguien quiere mi msn que lo cojaa!

maria_lagolo@live.com

OS QUIEROOOOOOOOO!!

Johnny rondon
Publicado: 05/05/2009 2:02 pm

Hola yo baje esto captcha pero no me funciona y eso que tengo el servidor wamp full time pero esto no me quiero mostrar nada y si ingreso el codigo de barra q me muestra nada de nada..

Desde ya mucha gracias.. saludo desde venezuela..

cesr
Publicado: 09/05/2009 10:25 am

hola amigo tengo un problema no me muestra la imagen?


[...] consistente y seguro. Descagar Script: http://www.box.net/shared/737zay1o9n Saludos Fuente: http://blog.unijimpe.net/crear-captcha-con-php/ __________________ Toda la Vidaa GroneYo GanzterAlianza Lima [...]

kadix
Publicado: 21/06/2009 4:33 pm

Sos Groso Sabelo!!!!

Gracias!!

Exitos!

Bye

Oscar
Publicado: 08/07/2009 1:00 am

Muy buen ejemplo. Para los que no les funciona, tienen que inicializar la variable $key=” antes del for en el archivo captcha.php
Si aun asi no les funciona revisen si tienen habilitada la extension php_gd2.dll en el php.ini.

Muchas Gracias

Saludos

Gabriela
Publicado: 22/07/2009 9:28 pm

EXCELENTE!!!
Sencillamene Excelente!!

Muy Bueno!!

Gracias, full gracias!!!!!
Me sirvió muchisimo, ya lo implemente. :)

Johnny Rondon
Publicado: 27/07/2009 1:10 pm

Hola como estan, alguien me podria decir porque no me sale los numero Oh letra el la pantalla verde?.. yo hago todos esto pero no me sale nada alguien me podria ayudar!!!.. Desde ya mucha gracias.. yo lo quiero para ponerlo en un login y tambien en un formulario de comentarios.. dejos mi correo luibeat@gmail.com

unijimpe
Publicado: 27/07/2009 7:58 pm

Hola, si no te salen los números es probable que no tengas la librería GD necesaria para generar graficos en PHP. Verifica esto, la otra es que no se muestren las variables de sesión, verifica que se esten devolviendo las variables de sesión también.

Johnny rondon
Publicado: 28/07/2009 7:43 am

Gracia Unijimpe por la respuesta veloz.. pero vi todos la cosa y nada sobre la libreria GD esta todos cheveres, sobre php_gd2 (GD) y el PHP.ini, pude configurar lo que tu me dice.. pase toda la noche buscando informacion sobre esto pero nada.. La unica forma mas facil es como tu tiene este ejemplo para lo que son nuevo en esto..

Saludo desde venezuela,

victor
Publicado: 30/07/2009 10:12 pm

Gracias por tu aporte!.

Me puedes ayudar ya que no me reconoce el ” .= ” esta acá $key .= $pattern{mt_rand(0,$max)};

Saludos

Netman
Publicado: 04/08/2009 5:17 pm

Amigo muy buen ejemplo 10 Puntos…
y bueno tengo un text junto al otro txt y necesito que se llene con el dato del Capctha como se aria un metodo de leer imagen o OCR…. Gracias haber si alguien lo hizo

Iran
Publicado: 06/08/2009 1:49 am

MUY BUENO EL POST!, yo tengo un problema de novatisima: he conseguido incorporarlo pero no consigo verificarlo, vaya, que incluso sin escribir nada le doy al “submit” y me lo envía :S Seguro que quedo como l anovata que soy, pero ¿dónde hay que poner el código de verificación?

Johnny Rondon
Publicado: 10/08/2009 9:18 am

Hola todos me funcionar gracias por todos..

jmocana
Publicado: 21/08/2009 7:48 pm

Gran post! Muy sencillo y bien explicado.

Felicidades y muchas gracias.

Nancy
Publicado: 22/08/2009 10:23 pm

Excelente !!! Millon de “GRACIAS”!

Haydelis
Publicado: 03/09/2009 2:42 pm

Mchas gracias por el aporte ! funciona bastante bien… Gracias

JoseA
Publicado: 25/09/2009 1:08 am

Hola, que tal.
Bueno, primero agradecer por el tiempo que dedican a compartir estas ideas y soluciones. Espero puedan darme una ayuda dado que no puedo hacerlo funcionar. En principio he leido en uno de los mensajes que en PHP5 hay que inicializar la $key , agradecería si me podrían explicar con que valor habría que inicializarla.
Por otro lado los problemas que me presenta es que NO se ve la imagen cuando ejecuto captchademo.php . He verificado la librería GD y tengo todo ok, es más utilizo algunos otros scripts que utilizan tambien esta librería. Y para finalizar, en el mismo captchademo.php me da el siguiente mensaje: Notice: Undefined index: action in D:\wamp\www\site\captchademo.php on line 3 , donde la linea 3 basicamente contiene lo siguiente:
if ($_SESSION['tmptxt'] == $_POST['tmptxt']) {

Bueno, desde ya agradecería si pueden darme su ayuda para lograr entender porque no funciona.

Slds,
JoseA

Alexito
Publicado: 28/09/2009 3:31 pm

Muy buen aporte a la comunidad, lo estoy implementando de la manera más fácil y sencilla que hay, saludos y gracias por ayudarnos a mejorar nuestro pequeño conocimiento…

Evangelion
Publicado: 14/10/2009 11:35 am

ha ha ha e sufrido un poco pero por fin lo pude usar para validar un formulario, Grax :D

jacow
Publicado: 19/10/2009 11:07 am

que buen apunte muchas gracias

FCR
Publicado: 22/10/2009 10:37 pm

me encanta lo bien que funciona, puedo usarlo sin cambar la imagen (como lo hace http://www.generaccion.com/)

matías
Publicado: 25/10/2009 2:58 pm

Muchisimas gracias me sirvio!!! Funciona muy bien!

cristian
Publicado: 14/11/2009 7:13 pm

Sos un groso!!
para los q recien empiezan con php como yo…..
si no te muestra la imagen/texto:
*el .rar descomprimanlo en la carpeta C:\wamp\www
*buscar el archivo php.ini (Inicio-Buscar o apretando las teclas Wind+F )
*sacarle el punto y coma “;” a la línea: extension=php_gd2.dll
*guardar el archivo php.ini
*reiniciar el servidor (wamp o el q sea)

degio08@gmail.com

Roberto
Publicado: 24/11/2009 8:33 am

Hola, quisiera saber como hacerlo funcionar en un formulario. Ya yo tengo los formularios andando, que envian los datos por email a traves de un archivo (email.php) lo que no se es como validar con el captcha. Digo, como hago para validar y que me envie los datos. Si me pueden explicar con codigo como incluir, les agradeceria.! Gracias.!

Roberto
Publicado: 30/11/2009 1:03 am

Ya lo hice funcionar.! Gracias.! xD

Maria Laura
Publicado: 30/11/2009 8:01 am

hola, necesitaria que me ayuden, no se donde pegar eso. Tengo hecho el formulario muy sencillo, pero bien valido para mi sitio, y quisiera agregar el captcha, pero no se donde agregarlo ni como. La hice a pulmon la pagina, si me pueden ayudar se los agradeceré. Descargue el zip, vi atentamente el contenido, pero dentro de mi formulario donde lo pongo? saludos

Manolo
Publicado: 01/01/2010 5:21 pm

Gracias por este turorial, me es de gran ayuda

ivan
Publicado: 16/02/2010 11:41 am

Hola si funiona este codigo lo pongo en un formulario y solo me muestra la imagen y el resto de la pagina no me lo muestra es por la version de php o que onda si pueden ayudarme se los agradezco

Luis
Publicado: 17/02/2010 3:58 pm

Me funciono perfecto….. alguien me puede ayudar y decirme como se puede distorsionar , difuminar o algo parecido para que las letras y números se visualicen un poco desordenadas…

Saludos…

Vicente
Publicado: 21/02/2010 3:29 am

Codigo para usar una lista de imagenes de fondo:


<?php
session_start();
$bgs= array("bgcaptcha.gif", "bgcaptcha2.gif");

$_SESSION['tmptxt'] = randomText(8);
$captcha = imagecreatefromgif( $bgs[rand(0,( count($bgs)-1 ) ) ]);
$colText = imagecolorallocate($captcha, 0, 0, 0);
imagestring($captcha, 5, 16, 7, $_SESSION['tmptxt'], $colText);
header("Content-type: image/gif");
imagegif($captcha);

function randomText($length) {
$pattern = "1234567890abcdefghijklmnopqrstuvwxyz";
for($i=0;$i

diego
Publicado: 11/03/2010 3:05 pm

hola, quiero colocar el captcha para enviar comentarios, alguien sabe que debo colocar envez de:

session_start();
if ($_POST['action'] == “checkdata”) {
if ($_SESSION['tmptxt'] == $_POST['tmptxt']) {
echo “Bienvenido”;
} else {
echo “Inténtalo nuevamente”;
}
exit;
}

donde dice “Bienvenido”, que tengo que escribir para que envie el comentario?????????

david
Publicado: 13/04/2010 3:26 pm

Muy buen articulo…voy a estudiarlo para implementarlo

Mike Morales
Publicado: 27/04/2010 10:14 am

Que tal, eh leido tu post y es muy bueno pero por alguna razon a mi no me resulta tan facil ver tu ejercicio en mi localhost donde se supone debe ir el captcha me aparece el link de la imagen rota como si no hubiera nada y cuando veo el captcha.php con el firebug no me esta devolviendo nada, que puedo estar haciendo mal?

Saludos!

Carlos
Publicado: 18/05/2010 12:52 pm

Hola. Tengo problemas en la linea donde pone:

if ($_POST['action'] == "checkdata") {

El error es:

Notice: Undefined index: action in captchademo.php on line 3

porfavor, necesito ayuda: cslbcn@hotmail.com

gracias!

Jitux
Publicado: 29/05/2010 10:38 am

Hola, muy bueno el post! Pero tengo una consulta, yo agregué las mejoras que dijo caos30:

function randomText($length,$type=0) {
switch ($type) {
case 0: $pattern = “1234567890abcdefghijklmnopqrstuvwxyz”; break;
case 1: $pattern = “abcdefghijklmnopqrstuvwxyz”; break;
case 2: $pattern = “1234567890″; break;
}
$max = strlen($pattern)-1;
for($i=0;$i < $length;$i++) $key .= $pattern{mt_rand(0,$max)};
return $key;
}

Mi problema es que cuando se genera una secuencia de letras y/o numeros sin espacios y sin simbolos raros (por ejemplo: â ), me funciona todo perfecto; pero ya cuando aparecen éstos no me los valida, y me los toma como que se ingresó mal los caracteres. Lo he verificado muchas veces y en ninguno de esos casos me acepta lo que ingreso.
Espero haberme expresado bien, ojalá me puedan dar una mano,
Saludos!

Any
Publicado: 15/06/2010 4:21 pm

Hola amigos, los archivos captcha.php y captchademo.php son una maravilla, los he puesto en mi localhost de forma independiente y funcionan perfectamente, ahora para incluirlo en mi formulario de envío de comentarios necesito lo siguiente: luego de emitir el código del captcha y sea correcto en vez de un echo que diga “Bienvenida” me envíe a pagina1.php y cuando el código introducido en el captcha no lo sea, en vez de un “Inténtelo Nuevamente” me envíe a pagina2.php.

Les agradcere su importante ayuda=) gracias de antemano.

Peliculas Online
Publicado: 27/06/2010 7:24 pm

gracias no allaba como hacer una xD

Oscar
Publicado: 28/06/2010 12:57 am

Por favor necesito ayuda de verdad…
El script está muy bueno, me funciona al 100, el problema es que no se como hago para enviar mi mensaje. He visto que tengo que cambiar el:

echo "Su Mensaje ha sido enviado correctamente, pronto nos pondremos en contacto con usted.";

pero el problema es que no puedo hacerlo funcionar… no me envía los datos de mi form…

Ayuda de verdad please..
Gracias

;-)

Oscar
Publicado: 28/06/2010 3:35 am

Donde inserto las variables de mi formulario…?

De verdad necesito ayuda…

unijimpe
Publicado: 28/06/2010 10:18 am

Para enviar los datos del formulario por email puedes leer los siguientes artículos:

Envíar E-mail con PHP
Introducción a PHPMailer

Guss
Publicado: 07/07/2010 6:10 pm

Hola como están esta buenísimo esto del capchat pero mejor seria que unieran todo u lo publiquen ya mejorado y hacer un formulario y ponerlo de un solo por que yo no puedo programación pero pongo lógica a lo que están explicando y trato de insertarlo al mi, por que así de estar poniendo códigos no se ni donde se pone a los bajado así me refiero bueno espero una pronta respuesta de todas la personas que han aportado sus conocimientos a mejorar este capchat esperando una pronta respuesta de su parte se me cuidan bendiciones Salu

Tony
Publicado: 13/07/2010 12:23 pm

Hola buenas a todos y a todas, soy novato en la parte de la programacion en php, quiero saber si me pueden ayudar he copiado practicamente igual el codigo de lo que estan en el zip a la hora de correrlos me tira el error del Notice: Undefined index: action agradeceria su valiosa ayuda espero vuestra respuesta gracias

unijimpe
Publicado: 13/07/2010 11:20 pm

Tony, lo que te dice ese mensaje que es una alerta y no un error es que la variable no existe o no esta definida. Puedes ocultar estas alertas colocando el siguiente código al inicio de la página.

<?php error_reporting(E_ERROR); ?>

Tony
Publicado: 14/07/2010 4:55 pm

Gracias unijimpe por tu pronta respuesta :) me da pena molestarte tanto talvez puede hacerte una ultima consulta, para validar del captcha del lado del servidor es basicamente asi como lo has puesto y funciona perfectamente, pero adicioanalmente quiero hacerlo del lado del cliente por medio de variables de sesion y usando javascript, el problema que tengo es que a la hora de jalar la variable de sesion al formulario el codigo que aparece es el anterior y no el actual que aparece en el form no se que podria hacer para poder jalar el codigo nuevo para compararlo en mi javascript, de antemano muchas gracias por vuestra ayuda, Muchas bendiciones

unijimpe
Publicado: 14/07/2010 11:22 pm

Un captcha no se puede validar con javascript, por que si lo intentarías tendrías que tener guardado en alguna parte del html el valor mostrado en el captcha. Eso significa que cualquiera podría escribir un script que busca la variable que contiene el equivalente del captcha para hacer que pase siempre el formulario. Es por ello que los captcha siempre se validan en el servidor.

Tony
Publicado: 15/07/2010 1:04 am

Muchas gracias nuevamente … mmmm pues creo que estoy complicado entonces porque lo que se quiere es como que me muestre el mensaje si ha introducido mal el codigo en un lugar especifico del form algo asi por ejemplo al registrarse en hotmail o ya hoo y no en otra pagina :S si hay alguan recomendacion la agradecria y nuevemente gracias

roaltopo
Publicado: 15/07/2010 10:17 am

Con respecto al comentario de unijimpe, un captcha sí puede validarse con javascript. Se puede pasar el contenido del captcha encriptado con un algoritmo como MD5, SHA-1, etc y entonces se realizaría la comparación de la respuesta del usuario encriptada , contra dicha variable. Para eso se necesitaría una librería en javascript que pudiera realizar la encripción MD5… en googleando se puede encontrar una fácilmente.

unijimpe
Publicado: 15/07/2010 10:16 pm

Tony, para mostrar el mensaje de error al usuario indicándole el problema debes guardar en una variable el estado de la validación para mas adelante mostrar el mensaje. Primero debes modificar al validación del formulario:

$status = true;
if ($_POST['action'] == "checkdata") {
if ($_SESSION['tmptxt'] == $_POST['tmptxt']) {
// Acá tu código para procesar datos
// ...
// redirecciones a otra pagina de confirmación
header("Location: confirmar.php")
exit;
} else {
$status = false;
}
}

Luego en una parte de tu formulario puedes mostrar el mensaje de error:

<?php if (!$status) { ?>Error, el código de validación es incorrecto.<php } ?>

roaltopo interesante tu idea, pero los spammers no ingresan directamente al formulario, ellos crean formularios con los mismos campos que el formulario a atacar y lo envían directamente a tu servidor. Entonces la validación debe hacer directamente en el servidor antes de procesar los datos enviados. De esta forma así lo traten de enviar desde un servidor externo este no llegará a procesarse evitando que los atacantes hagan SPAM utilizando nuestro servidor.

Tony
Publicado: 16/07/2010 4:36 pm

Os agradezco muchisima vuestra ayuda…estamos en contacto y muchos exitos a todos

Luis
Publicado: 22/07/2010 6:36 pm

Hola a todos, tengo un problema con el captcha, en principio funciona correctamente, pero no me envía el contenido del formulario, me indica “Bienvenido” y no se como tengo que enviarlo, he leído en el foro, a otros ya les ha ocurrido algo parecido pero se trata del envío de correo, en mi caso se insertan anuncios directamente, en tiempo real en la base de datos: Ruego ayuda, tengo un ataque masivo de spambots. Gracias…

Liop
Publicado: 26/08/2010 7:09 pm

Muy importante, ya hay algun comentarios al respecto pero como son solo unas lineas y acabo de eprder unos minutios ;O) :

Para que funcione con PHP5 se tiene que definir la variable $key en la funcion randomText.

Justo antes del for añadir por ejemplo:

$key = '';
for($i=0;$i<$length;$i++) {
$key .= $pattern{rand(0,35)};
}

Muchas gracias al autor, este script me es muy util.

Liop.

Nico
Publicado: 22/09/2010 5:58 pm

Como andan? Tengo una consulta para hacer, tal vez alguien me pueda dar una mano.

Resulta que quise hacer mi propio captcha con imagenes ya creadas con su respectivo texto con colores y ondas.

Cada imagen está guardada así 1.jpg,2jpg,3jpg.. hasta 14.jpg.
Tengo una tabla en la base de datos que con ese número retorno lo que dice la imagen! creí que con esto funcionaría pero veo que igual así consiguen violar mi triste captcha!! Como lo hacen??

Envió en el formulario lo que escribió el usuario para validar el captcha, y el número aletaorio de la imagen entre 1 y 14 como hidden. Ahí con ese número busco en la tabla el “captcha valido” para esa imagen y verifico lo que ingresaron.

Como hacen los robotitos para consultar esa variable en la BD??

Tengo que meterlas en la sesión para que sea más seguro?

Realmente me sorprende como lo hacen. Ya veré si este método no me lo saltan.

Abrazo

Andres
Publicado: 23/09/2010 11:49 pm

esta muy bueno, pero seria mejor si se explicara en donde va cada código.. Ok entiendo la parte de crear un captcha.php donde va la función… pero y los demás? como van organizados?.. gracias por la ayuda de ante mano.

chaskarron
Publicado: 25/09/2010 8:59 am

Un 10, perfectamente explicado con sus codigos de ejemplo, con una explicacion simple y concisa, y yo que pensaba que era mucho mas complicado, muchas gracias por este post, te lo agrecere de por vida.
Un saludo

drasz
Publicado: 26/10/2010 5:53 am

Alguien lo ha probado en Internet Explorer y le ha funcionado? porque increiblemente ami no :s.

octavio bret
Publicado: 26/10/2010 4:02 pm

me parece interesante como en los rapid

gracias

Manu
Publicado: 13/11/2010 12:22 pm

Muy buen artículo me ha servido de mucho!

gracias!

alberais
Publicado: 01/12/2010 4:31 am

Hola a todos los internautas programadores, quería preguntar si a alguien le ha ocurrido que al implementar en un captcha un refresco de los caracteres (porque no sean legibles) sin recargar de nuevo la página, llamando a .src=’captcha.php’ donde se genera la nueva imagen, se vuelve a abrir sesión y se guarda el nuevo código generado—> les pasa que en IE funciona perfectamente, y en mozilla firefox vuelve a recargar la misma imagen, sin ni si quiera modificar la variable de sesión con la nueva serie captcha??? He leido por ahí que es posible que sea de la cache del firefox… Estoy con ello pillado, porque no encuentro la solución por más horas que le echo. Gracias de antemano. (firefox recarga la misma imagen captcha al volver a recargar la imagen)

Tonimito
Publicado: 19/12/2010 2:43 pm

Gracias, una vez más, unijimpe!
la verdad es que es fantástico!

Tan sólo un par de dudas:
1 – Veo que el artículo es del año 2007. ¿Aún es fiable este sistema? ¿No lo leen los robots OCR?
2 – ¿Se puede definir una fuente determinada? ¿cómo?

Gracias y un saludo!

unijimpe
Publicado: 19/12/2010 2:56 pm

Hola, en realidad este articulo era para mostrar como con un poco de imaginación se puede implementar un sistema de captcha. He puesto lo básico con la intención de hacerlo entendible pero si desean un captcha mas seguro pueden mejorar el script, cambiando la fuente, agregando lineas onduladas de diferentes colores, aplicar colores aleatorios a las letras. Si no deseas hacer todos estos cambios te recominedo utilizar reCaptcha (http://blog.unijimpe.net/utilizar-recaptcha-con-php/)

Armando
Publicado: 26/01/2011 10:38 am

HOla, alguien podria pasarme un enlace a la ejemplo por que nopuedo optenerlo y cuando genero los archivos me marca un error.

Gracias

RGF_py
Publicado: 11/02/2011 7:38 pm

Gracias viejo! me sirvió tu ejemplo lo pude adaptar fácilmente a mi script

Nata
Publicado: 22/02/2011 7:32 pm

Tengo un problema:
Por mas que ingrese el Captcha correctamente, me aparece como si lo hubiera escrito mal.
El codigo donde puse la imagen es:

<?
session_start();
echo ''.
''.
''.
'';
$tramite=$_GET["tramite"];
if ($tramite=='poner'){
if ($_SESSION["usuario"]==$noexiste){
echo ''.
'UsuarioContraseñaEntrarregistrate gratis';
}
else{
echo ''.
''.'ingresa los caracteres de la imagen para iniciar el tramite.'.
''.
''.
''.
'ENVIAR'.
''.''.
'';
}
}
elseif ($tramite=='regis'){
echo ''.
''.'ingresa los caracteres de la imagen para iniciar el tramite.'.
''.
''.
''.
'ENVIAR'.
''.''.
'';
}
else{
echo 'ERRORclickaquípara regresar a la página de inicio';
}
echo ''.
''.
''.
''.
''.
'';
?>

Y el codigo del resultado es:

<?
session_start();
echo ''.
''.
''.
'';
$tramite=$_GET["tramites"];
if ($tramite=='poner'){
if($_GET["captcha"] == $_SESSION['tmptxt']){
// INSERTA EL CÓDIGO EXITOSO AQUI
echo ''.
''.
'ingrese su numero aqui'.
''.
'nombre'.
''.
'descripcion'.
''.
'entrar'.
'';
}else
{
// INSERTA EL CÓDIGO DE ERROR AQUÍ
echo "reprobado";
}
}
elseif ($tramite=='regis'){
if($_GET["captcha"] == $_SESSION['tmptxt']){
// INSERTA EL CÓDIGO EXITOSO AQUI
echo ''.
''.
'Nombre'.
''.
'Usuario'.
''.
'Contraseña'.
''.
'Repetir Contraseña'.
''.
'Mail'.
''.
''.
'entrar'.
'';
}else
{// REMPLAZO EL CAPTCHA USADO POR UN TEXTO LARGO PARA EVITAR QUE SE VUELVA A INTENTAR
$_SESSION["captcha"] = md5(rand()*time());
// INSERTA EL CÓDIGO DE ERROR AQUÍ
echo 'reprobado';
}
}
else{
echo 'ERROR click aquípara regresar a la página de inicio';
}
echo ''.
''.
''.
''.
''.
'';
?>

Aguardo respuesta, desde ya muchas gracias.

Nata
Publicado: 22/02/2011 7:34 pm

disculpen, el codigo se escribió mal.

angel
Publicado: 18/03/2011 1:55 pm

instale un captcha como este en mi sitio web y algunos spambots si lograron brincarlo, lo que hice fue ponerle una fuente diferente y mas distorcionada y parese ser que soluciono el problema

Pedro
Publicado: 27/05/2011 8:29 pm

hola me gusto mucho el post
pero al tratar de agregar un catcha en un proyecto me tira un error al cargar el archivo q muestra la imagen
el error es el siguiente

No se puede mostrar la imagen “http://localhost:8080/proyecto/captcha.php” porque contiene errores.

alguien sabe como resolverlo?

angel
Publicado: 25/06/2011 4:59 pm

no puedo evitar que los spams salten este captcha, ya le cambien la fuente el tamano el fondo y nada alguna sugerencia?

este es el codigo:

<?php
session_start();
$img = imagecreatefromgif("../img/bgcaptcha.gif");
function randomText($length) {
$pattern = 'qwertyuiopasdfghjklzxcvbnm0123456789';
for($i=0;$i

Alvaro
Publicado: 05/08/2011 10:22 am

Buenas a todos

Me funciona estupendamente el captcha, gracias por el trabajo, solo tengo una duda, a ver si podeis resolvermela:

tengo este codigo pra volver al formulario si el cptcha no es correcto, basicamente lo que hace es volver a la pagina anterior:

} else {
$referencia= $_SERVER['HTTP_REFERER'];
header (“Location: “.$referencia);
}

Al hacer este paso, los datos introducidos previamente en el formulario se pierden y me gustaria que permanecieran. Alguna sugerencia??

mil gracias

Raúl
Publicado: 03/11/2011 6:41 pm

Muy bueno el script y gracias por el aporte, solo quiero agregar que el script funciona bien despues de hacerle unos retoques porque al principio no funcionaba (en un comentario que hizo Sergio para iniciar la variable key)

Debo decir que me da un error a pesar de que funciona el script y queria compartirlo para ver si alguien me pude decir a que se debe.

Notice: Undefined index: action in E:\xampp\htdocs\captcha\captchademo.php on line 3

Bueno muchas gracias desde ya.

Saludos.

Raúl
Publicado: 04/11/2011 6:56 am

He solucionado el error que tenia seteando la variable global post

if (isset($_POST['action']) == "checkdata") {

saludos

Marcos
Publicado: 04/11/2011 1:02 pm

Esta muy bien explicado pero no sirve,te explico,una vez q se crea la clave y se guarda en la variable sesion podes enviar el mismo captcha una y otra vez,porque la varible sesion solo cambia cuando se accede a la pagina que cambia la clave..un saludo

Marcos
Publicado: 10/11/2011 6:43 am

Perdon me he dado cuenta de que si esta todo en la misma pagina funciona perfectamente..es decir el llamado a la creacion de la variable session debe estar en la misma pagina q recibe los datos de esa maner funciona…un saludo

decoracion con globos
Publicado: 10/11/2011 6:18 pm

Muchas gracias, lo estoy probando. Espero que pueda hacerlo funcionar.

Un saludo

alan0994RoleDeveloper
Publicado: 27/12/2011 4:41 pm

Yo utiliza esto :D


function random_text($tamaño){
$fuente = "1234567890abcdefghijklmnopqrstuvwxyz";
$return = substr(str_shuffle($fuente),0,$tamaño);
return $return;
}

se ahorra muchisimos recursos y es mas directo y sostenible :D!

joseamauta
Publicado: 19/01/2012 9:20 pm

function randomText($length) {
$key=”";//DECLAREN ESTO EN EL METODO
$pattern = “1234567890abcdefghijklmnopqrstuvwxyz”;
for($i=0;$i<$length;$i++) {
$key .= $pattern{rand(0,35)};
}
return $key;
}

PARA LOS QUE NO LES FUNCIONA, DECLAREN EL KEY DENTRO DEL METODO, DESPUES DE ESO FUNCIONA

Mosiah Orellan
Publicado: 28/01/2012 5:45 am

Muchas gracias por el captcha me va a servir de mucho!

Saludos!

xPapaChox
Publicado: 03/03/2012 9:04 pm

Interesnate…. solo me falto declarar y salio. Já que lokaso.

sergio_team
Publicado: 05/03/2012 4:42 am

Muy buena función, la llevo usando desde hace meses, y bueno, que sepas que este enlace esta en los créditos de uno de mis juegos de navegador. Sin este captcha habría tenido unos cuantos problemas para mis webs XD

_nova
Publicado: 18/03/2012 12:34 am

Excelente articulo, pero tengo un problema :S no logro hacer que se visualice la imagen gif :S me dice este error:

La imagen http://localhost/etc…etc… no puede mostrarse por que contiene errores

, probé incluso cambiando a otros formatos la imagen lo mismo con las funciones, pero sigue el mismo error.

Tengo VertrigoServ con php 5.3 y la librería gd habilitada

Jose Luis
Publicado: 19/03/2012 4:46 pm

Hola, soy muy novato en esto ( recién estoy por entrar al mundo de la programación ) y tenia una duda, me baje los archivos y pasa que al
ejecutarlo con mi explorador me sale todo, menos la imagen
Haber si alguien me ayuda con esto, se los agradezco de ante mano
Saludos y gracias por compartir información tan buena !

angel
Publicado: 18/05/2012 12:25 pm

hace anios que uso este sistema de captcha y me a funcionado muy bien, le hice algunas mejoras y se los comparto:

font.ttf la que ustedes gusten de preferencia no muy legible porque algunos spambots si logran brincarla

jorge
Publicado: 17/07/2012 8:42 pm

no se ve la imagen. y todos los php.ini de wampserver tienen el dll avilitado
porqueeeeeee???!!!!!!!!!!

jorge
Publicado: 17/07/2012 8:47 pm

esperen. ahora si funciona. hay que hacer lo que dise joseamauta

Miguel
Publicado: 17/09/2012 5:26 pm

Gracias! si funcionó despues de todo
no se porque pero la función que me retorna el key hacía que la imagen no apareciera, pero lo cambié por otra y si funcionó perfectamente :D

El-vividor
Publicado: 21/10/2012 4:43 am

unijimpe, disculpa, pero me he bajadop tu script, y todo anda bien, todo excepto que no es tan seguro como parece, pues el spam me sigue llegando, aunque ya no con tanta frecuencia como antes, lo se por que por cada formulario que se envia recibo una copia en mi correo, a que se podria deber esto¿?

Jorge
Publicado: 05/12/2012 12:15 am

Excelente, no estoy pensando en colocarlo actualmente pero quería saber como funcionaba para un futuro y este ejemplo sencillo me lo ha explicado de mil maravillas. Gracias.

 

Comentar

En este blog los comentarios están moderados, serán mostrados cuando el administrador los apruebe. Por favor, evita comentarios ofensivos u obscenos por que no serán aprobados.
Si deseas publicar código fuente debes hacerlo entre las etiquedas <code> y </code>, además debes reemplazar los carácteres < por &lt; y > por &gt;.

(Requerido)

(Requerido, no será publicado)

(Requerido)

(Tags aceptados: <a> <em> <strong> <code> <ul> <li>)