Hola wizardxyz, aqui te coloco una solucion sencilla:
Primero crea un archivo (PHP en mi caso) llamado turing.php y coloca este codigo:
Código :
<?php
function randomPrefix($length) {
$random = "";
srand((double)microtime()*1000000);
$data = "AbcDE123IJKLMN67QRSTUVWXYZ";
$data .= "aBCdefghijklmn123pq45rs67tuv89wxyz";
$data .= "FGH45P89";
for($i = 0; $i < $length; $i++) {
$random .= substr($data, (rand()%(strlen($data))), 1);
}
return $random;
}
$code = strtolower(randomPrefix(6));
// Iniciar la variable de sesión para guardar el código del turing en sesión
session_start();
// Guardar el código turing en la sesión
$_SESSION['turing'] = $code;
// Ancho de la imagen
$largeur = 128;
// Alto de la imagen
$hauteur = 20;
// Crear una imagen con la libreria GD de PHP
$img = imagecreate($largeur, $hauteur) or die("No existe soporte de imagenes");
// Color de fondo de la imagen del turing
$bgc = imagecolorallocate($img, 255, 255, 255);
// Colores a utilizar en la imagen
$black = imagecolorallocate($img, 0, 0, 0);
$gris = imagecolorallocate($img, 47, 56, 111);
// Pintar una imagen rectangular con PHP
imagefilledrectangle($img, 0, 0, $largeur, $hauteur, $bgc);
$hor_pos = 17;
// For para agregar los caracteres del código en la imagen
for($i = 0;$i < strlen($code);$i++){
imagestring($img, 9, $hor_pos, rand(0,4), $code[$i], $black);
$hor_pos+=rand(15,20);
}
// for para colocar los puntos en la imagen (Descomentar para probar)
/*for($i = 0;$i < 30;$i++){ // Valor anterior de la variable de control 60
imagesetpixel($img, rand(0,$largeur), rand(0,$hauteur), $gris);
}*/
for($i = 0;$i < 5;$i++){
if($i<2){
$x1 = rand(0,$largeur);
$y1 = 0;
$x2 = abs($x1-rand(0,5));
$y2 = $hauteur;
}
else {
$x1 = 0;
$y1 = rand(0,$hauteur);
$x2 = $largeur;
$y2 = abs($y1-rand(0,5));
}
// Dibuja lineas en la imagen
//imageline($img, $x1, $y1, $x2, $y2, $gris);
}
imagejpeg($img,"",25);
imagedestroy($img);
?>
Luego crea un archivo PHP con el siguiente contenido (en mi caso lo llame form.php):
Código :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
</head>
<body>
<form action="login2.php" method="post" name="form" id="form">
Verificación: <input name="codigo" type="text" id="codigo"><br />
<img src="turing.php" alt="Imagen de seguridad" width="128" height="20" border="0"><br />
<input name="Submit" type="submit" value="Entrar">
</form>
</body>
</html>
Por ultimo crea el archivo que recibe los valores del formulario y valida que codigo introducido en el formulario coincide con el turing en sesion:
Código :
<?php session_start(); ?>
<?php
// If para saber si el usuario ingreso el codigo de seguridad correctamente
if($_POST['codigo'] != $_SESSION['turing']){
$_SESSION['turing'] = '';
session_destroy();
header("Location: form.php");
}
else{
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
</head>
<body>
<?php echo 'Codigo Valido'; ?>
</body>
</html>
<?php } ?>
Explicación:
El primer archivo
turing.php es el que pinta la imagen en el formulario y guarda en la sesión el codigo generado en la
randomPrefix.
El parámetro que recibe la función
randomPrefix es para indicar el numero de caracteres a generar.
La variable
$data contiene los caracteres con el cual se va a generar el código.
la variable de sesión
$_SESSION['turing'] contiene el código generado para ser luego comparado al momento de enviar el formulario
El archivo
form.php tiene un formulario común y corriente lo unico es que hay un atributo
img que llama al archivo turing.php para pintar el código.
Y por ultimo el ultimo archivo login2.php valida que el código sea valido.
Espero que te sea ayuda, cualquier problema con el código o duda no vaciles en preguntar saludos