Código fuente Ya.

Puede ejecutar la o las páginas para probar el concepto inmediatamente.

 

Concepto:Crear un Captcha con PHP

El concepto trata sobre:php
Autor:

Retornar

Nombre del archivo:pagina1.html

Comentarios
Un captcha es un código que aparece dentro de una imagen y que casi todos los formularios de los sitios
web están implementando para evitar el spam.
El código que aparece debe ser ingresado por el visitante al sitio, si lo ingresa correctamente podemos
estar casi seguros que quien ingresó el valor es un humano y no un programa automático que visita nuestra web.
Nombre del archivo:estilos.css

Nombre del archivo:captcha.php

Comentarios
Importamos el archivo que contiene la clase ClaveAleatoria
  require('rutinas.php');
Creamos una imagen con un determinado ancho y alto:
  $ancho=100;
  $alto=22;
  $imagen=imageCreate($ancho,$alto);
Creamos un recurso con el color azul y pintamos el fondo de la imagen:
  $azul=ImageColorAllocate($imagen,195,217,255);
  ImageFill($imagen,0,0,$azul);
Creamos un objeto de la clase ClaveAleatoria, fijamos la cantidad de caracteres de la misma y
almacenamos el resultado en una variable local:
  $clave=new ClaveAleatoria();
  $clave->fijarLongitud(6);
  $valoraleatorio=$clave->generar();
Inicializamos la sesión para almacenar en el servidor el código generado y posteriormente poderlo 
contrastar con el que cargue el visitante en el formulario:
  session_start();
  $_SESSION['captcha']=$valoraleatorio;
Creamos otros dos colores:
  $rojo=ImageColorAllocate($imagen,255,0,0);
  $negro=ImageColorAllocate($imagen,0,0,0);
Graficamos algunas líneas negras sobre la imagen:
  for($c=0;$c<=3;$c++)
  {
    $x1=rand(0,$ancho);
    $y1=rand(0,$alto);
    $x2=rand(0,$ancho);
    $y2=rand(0,$alto);
    ImageLine($imagen,$x1,$y1,$x2,$y2,$negro);
  }
Dibujamos el código generado:
  ImageString($imagen,5,25,5,$valoraleatorio,$rojo);
Generamos la cabecera a enviar al navegador indicando que enviaremos una imagen con formato png:  
  Header ("Content-type: image/png");
Volcamos la imagen previamente generada:  
  ImagePNG ($imagen);
Liberamos recursos del servidor:  
  ImageDestroy($imagen);
Nombre del archivo:rutinas.php

Comentarios
La clase ClaveAleatoria define tres atributos:
  private $longitud=10;
  private $numeros=true;
  private $mayusculas=true;
$longitud : almacena la cantidad de caracteres que tendrá la clave.
$numeros : indica si se incluyen números dentro de la clave.
$mayusculas : indica si se incluyen letras mayúsculas en la clave.

Los métodos:
  public function sinNumeros()
  {
    $this->numeros=false;
  }
  
  public function sinMayusculas()
  {
    $this->mayusculas=false;
  }
fijan con falso los atributos $numeros y $mayusculas.

Para fijar la longitud de la clave tenemos el método:
  public function fijarLongitud($l)
  {
    $this->longitud=$l;
  }

Por último tenemos el método generar:
  function generar()
  {
    //definimos un vector 
    $carac=array();
    //si el atributo $numeros tiene almacenado true procedemos a ejecutar el for
    if ($this->numeros)
      //Guardamos en el vector los valores enteros comprendidos entre 48 y 57. Estos valores 
      //coinciden con los valores ascii de los números del 0 al 9
      for($f=48;$f<=57;$f++)
        $carac[]=$f;
    if ($this->mayusculas)
      //Añadimos al vector los valores comprendidos entre 65 y 90. Estos valores coinciden con
      //los caracteres alfabéticos ('A' hasta 'Z')	
      for($f=65;$f<=90;$f++)
        $carac[]=$f;
    //caracteres alfabéticos ('a' hasta la 'z')	
    for($f=97;$f<=122;$f++)
      $carac[]=$f;
    $canti=sizeof($carac);
    $clave='';
    //Almacenamos caracter a caracter la clave generada. la función chr convierte a caracter el valor
    //numérico.
    for($f=1;$f<=$this->longitud;$f++)
      $clave.=chr($carac[rand(0,$canti-1)]);
    return $clave;
  }*/
  
Nombre del archivo:pagina1.php

Comentarios
Lo primero que hacemos en inicializar la sesión antes de cualquier salida HTML (sino no podremos rescatar
el valor generado al hacer el gráfico):
<?php
session_start();
?>
Si el contendio almacenado en la variable de sesión coincide con el valor ingresado en el control input, luego
podemos decir que ingresó el valor correcto:
if ($_SESSION['captcha']==$_REQUEST['captcha'])
  echo "Ingresó el valor correcto";
else
  echo "Incorrecto";

Retornar



Código Fuente Ya - 2015