Demos

demo Validación de Captcha con PHP

Esta demo se compone de dos archivos que veremos por separado:

  • demo-captcha.php que crea la imagen en png.
  • demo-captcha-form.php que realiza la validación.

El Captcha

demo-captcha.php

  • Este archivo es el encargado de crear el captcha en formato image/png.
  • Tambien crea la variable de sesión $_SESSION['captchaKey'] y le asigna el valor que hemos pintado en la imagen del Captcha.
demo-captcha.php
<?php /* CAPTCHA CON PHP */
  session_start();
  $captchaSize = 5;
  
  do {
    $md5Hash = md5(microtime()*mktime());
    $x = array("0", "1", "o", "O", "l");
    $md5Hash = str_replace($x, "", $md5Hash);
  } while(strlen($md5Hash)<$captchaSize);
  
  $captchaKey = substr($md5Hash, 0, $captchaSize);
  $_SESSION['captchaKey'] = md5($captchaKey);
  $captchaImg = imagecreatefrompng("../img/bg_captcha.png");
  $textColor = imagecolorallocate($captchaImg, 80, 80, 80);
  $lineColor = imagecolorallocate($captchaImg, 80, 80, 80);
  imagesetthickness($captchaImg, 1);
  $imageInfo = getimagesize("../img/bg_captcha.png");
  $linesToDraw = rand(5,8);
  
  for($i=0; $i<$linesToDraw; $i++){
    $xStart = mt_rand(0, $imageInfo[0]);
    $xEnd = mt_rand(0, $imageInfo[0]);
    imageline($captchaImg, $xStart, 0, $xEnd, $imageInfo[1], $lineColor);
  }
  
  imagettftext($captchaImg, 20, 0, 10, 30, $textColor, "../fonts/VeraBd.ttf", $captchaKey);
  header("Content-type: image/png");
  header("Cache-Control: no-cache, must-revalidate");
  header("Expires: Fri, 19 Jan 1994 05:00:00 GMT");
  header("Pragma: no-cache");
  imagepng($captchaImg);
?>

com · edit · js · jq · php · css · html

El Formulario

demo-captcha-form.php

  • Este archivo, que es un formulario, es el encargado de validar el captcha.
  • El formulario llama al otro archivo demo-captcha.php en el atributo src delelemento img.
  • Se evalúa la variable de sesión $_SESSION['captchaKey'] y se compara con $_POST['captchaCode'] que es el valor que hemos escrito en el campo captcha del formulario.
demo-captcha-form.php
<?php
  session_start();					
  $_SESSION['mensaText']= "";
  if ( !isset($_POST['captchaCode']) ) {
    $_SESSION['mensaText']='Escribe el codigo Captcha';
  } elseif( md5($_POST['captchaCode'])!=$_SESSION['captchaKey'] ) {
    $_SESSION['mensaText']='El Captcha no es correcto';
  }	else {
    $_SESSION['mensaText']='El CAPTCHA es correcto';
    unset($_POST); //vaciar campos
  }
?>
<form enctype="multipart/form-data" method="POST" action="">
  <?php echo $_SESSION['mensaText']?><br>
  <input name="captchaCode" placeholder="captcha" type="text" value="" title="Escribe aqui el código de la imagen" />
  <img src="./demo-captcha.php" alt="captcha" title="Código Captcha" />
  <input type="submit" name="enviar" value="COMPROBAR" />
</form>

com · edit · js · jq · php · css · html
aviso

Atención

Para probar estas demos en tu ordenador necesitas acceso a un servidor con php instalado .