Captcha con protección de color

0 - , , - 25/02/2011 18:39:36

En snipplr he visto un interesante snippet de PHP que permite crear un captha con dos colores -azul y rojo- de modo que podemos indicar a los usuarios que sólo introduzcan los caracteres de color rojo o los de azul. La mayor parte de los bots siempre intentan descifrar todo lo mostrado en este tipo de imagenes.

El código que a continuación se presenta en este post parte de esta idea pero introduciendo un ligero cambio o aportación. Se establecen a priori los caracteres sobre los que posteriormente se extraen aleatoriamente 5 de los mismos. De ese modo se evitan posibles confusiones entre por ejemplo "o" y "0" ó "1" y "l".

<?php
session_start();
header("Content-type: image/png");
$anchura = 146;
$altura = 30;

$im = @imagecreate($anchura, $altura)or die("Cannot Initialize new GD image stream");
imagecolorallocate($im, 255, 250, 255);
$noise_color = imagecolorallocate($im, 207, 239, 250);
for($i=0; $i<($anchura*$altura)/3; $i++) {
	imagefilledellipse($im, mt_rand(0,$anchura), mt_rand(0,$altura), 1, 1, $noise_color);
}
for($i=0; $i<($anchura*$altura)/150; $i++ ) {
 imageline($im, mt_rand(0,$anchura), mt_rand(0,$altura), mt_rand(0,$anchura), mt_rand(0,$altura), $noise_color);
}

$texto_color[0] = imagecolorallocate($im, 255, 0, 0);
$texto_color[1] = imagecolorallocate($im, 51, 166, 207);

$caracteres = 'ABCDEFGHKLMNPRSTUVWYZ23456789';
$longitud = 5;
  function generarCodigo($longitud,$caracteres) {
    $code = '';
    for($i = 1, $cslen = strlen($caracteres); $i <= $longitud; ++$i) {
      $code .= strtoupper( $caracteres{rand(0, $cslen - 1)} );
    }
    return $code;
}
$texto = generarCodigo($longitud,$caracteres);

unset($_SESSION['captcha']);
$_SESSION['captcha']['blue'] = $_SESSION['captcha']['red'] = '';

for($j = 0; $j < mb_strlen($texto); $j++) {
	imagettftext($im, 20, 0, 5+($j*23), 24, $texto_color[$j%2], 'Includes/elephant.ttf', $texto[$j]);
	if(($j%2) == 1) {
		$_SESSION['captcha']['blue'] .= $texto[$j];
	}
	else {
		$_SESSION['captcha']['red'] .= $texto[$j];
	}
}
imagepng($im);
imagedestroy($im);
?>

Para comprobar si el captcha ha sido introducido correctamente, deberemos usar $SESSION['captcha']['red'] para comprobar los caracteres en rojo y $SESSION['captcha']['blue'] para los azules.

Ver ejemplo en funcionamiento » »

Securimage: Utilizar CAPTCHA de una manera sencilla

0 - , , - 05/05/2008 07:16:06

Securimage es un script open-source, escrito en PHP que nos permite generar imágenes CAPTCHA complejas para proteger nuestros formularios de robots de spam. Puede ser fácilmente añadido a los formularios de un sitio web, siempre y cuando el servidor tenga instalado PHP con soporte para GD.

Características principales:
- Muestra una imagen con tan sólo tres líneas de código.
- Valida los campos enviados en menos de seis líneas de código.
- Longitud de código personalizable.
- Elección del juego de caracteres.
- Soporte de fuentes TTF.
- Uso de fuentes GD cuando las TTF no estén disponibles.
- Fácil implementación de imágenes de fondo.
- Líneas arqueadas a través del texto.
- Uso de una lista de palabras para crear los códigos CAPTCHA.

Securimage » »

1