Cómo crear un Captcha en PHP

Cuando trabajas con formularios web, casi siempre es necesario colocar un captcha para evitar que robots envíen spam, lo que ayuda a reducir peticiones inútiles al formulario que se está creando.

Lo más fácil sería utilizar el sistema reCaptcha de Google, la adaptación resulta simple y el sistema es muy seguro, pero si no quieres utilizar servicios de terceros, puedes crear tu propio sistema de captcha con PHP.

Para esto vamos a crear dos archivos, uno llamado captcha.php y otro llamado ejemplo_captcha.php, los nombres pueden variar según tu proyecto.

Para el archivo captcha.php utilizaremos el siguiente código:

<?php <?php  session_start();
 //Se genera un string y se acorta a seis caracteres 
 $ranStr = substr( sha1( microtime() ),0,6); 
 //Se almacena el valor en una variable de sesión 
 $_SESSION['captcha'] = $ranStr; 
 //Se crea la imagen (esta debe existir) 
 $imagen = imagecreatefromjpeg( "fondo_captcha.jpg" ); 

// la funcion imagecolorallocate ( $imagen , rojo , verde , azul ) genera un color  
$colortext = imagecolorallocate($imagen, 0, 0, 400); 
 imagestring($imagen, 5, 30, 8, $ranStr, $colortext); 
 header( "Content-type: image/jpeg" );
 //Se crea la imagen 
imagejpeg($imagen); ?>

 

Este código es el que creará el captcha que se mostrará en el formulario, por medio de la función microtime que devuelve la fecha actual con microsegundos, reducida a seis caracteres. Esto se almacena en la variable $ranStr. Se utiliza una imagen de fondo en formato jpg para mostrar el código, esta imagen debe existir en el directorio donde están los otros dos archivos. Puedes descargar la imagen de fondo utilizada en este ejemplo:

Luego se le da color al texto y se crea la imagen con el código. Ahora pasamos al otro archivo, ejemplo_captcha.php, que tendrá el siguiente código:

<?php <?php  session_start(); 
//Variable con el resultado de la comparación 
$resultado =''; if(isset($_POST['codigo'])): 
//Si el codigo ingresado es correcto:  
if($_POST['codigo'] == $_SESSION['captcha']): 
$resultado = "Codigo correcto"; 
else: $resultado = "Codigo incorrecto, prueba nuevamente"; 
endif;  
endif;
?>
<!doctype html><html lang="en"> 
 <head> 
  <meta charset="UTF-8"> 
    <title>Ejemplo de Captcha con PHP</title> 
  <style type='text/css'> 
table tr td{ border:3px solid blue; text-align: center; } 
</style> </head> 
<body> 
<!-- Se asigna la misma página para procesar el resultado --> 
<form action="ejemplo_captcha.php" method='POST'> 
<table> <tr> <td><input type="text" name="codigo" required></td> 
<td><img src="captcha.php"/></td> 
</tr> 
<tr bgcolor="red"><td colspan="2">
<input type="submit" value="Comprobar"></td></tr> 
<tr><td colspan="2" id="resultado">
<?php echo $resultado; ?></td></tr> 
</table> </form>
 </body>
</html>

 

Aquí se muestra el formulario con el Captcha, se evalúa si el código ingresado es correcto o no y se muestra el mensaje correspondiente. Se debe tomar en cuenta que en el formulario se hace el proceso dentro de la misma página, si vas a cambiar el nombre de los archivos php, es necesario cambiarlo también en esta parte del código.

Puedes ver el formulario funcionando aquí.

Si tienes alguna duda o sugerencia, escríbela en los comentarios.

Grupo de WhatsApp: https://chat.whatsapp.com/Ch45FZaJcbxDb7WeHAOtAQ
Grupo de Telegram: https://t.me/Masterhacks_net

Donaciones
Gracias por apoyar el libre conocimiento!
Bitcoin: 3L2Y8LC5tmRffopnvv5J9DHe6wnrmyWVMm
Litecoin: MDtX7eRekxoRigMNtguziZqRdkr8CT5DKs
BCH: 3PnUezyhjWHQoBVfb1GpQJurMNbVjyvrVG
Ethereum: 0x1f786c3195b9a55e320848f240b1cfc37b159535

Una respuesta a “Cómo crear un Captcha en PHP”

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *