CAPTCHA bàsic amb PHP GD
Aquest codi utilitza l'extensió GD de PHP per crear una imatge CAPTCHA amb les següents característiques: text aleatori, distorsió de lletres, i elements de soroll (punts i línies) per dificultar la lectura automàtica.
El codi ha d'estar desat en un fitxer PHP separat (ex: captcha.php) i s'ha de carregar amb una etiqueta <img> al HTML principal.
Codi PHP (captcha.php)
PHP
<?php
// Funció per generar una cadena aleatòria
function generateRandomString($length = 6) {
$characters = '23456789ABCDEFGHJKLMNPRSTUVWXYZ';
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, strlen($characters) - 1)];
}
return $randomString;
}
// 1. Configuració i Generació del Text
$captcha_text = generateRandomString(5);
// Per emmagatzemar el text a la sessió (per a la validació posterior)
// session_start();
// $_SESSION['captcha_code'] = $captcha_text;
// 2. Creació del Llenç (Lienzo)
$amplada = 150;
$alçada = 40;
$imatge = imagecreatetruecolor($amplada, $alçada);
// 3. Definir Colors
$fons_color = imagecolorallocate($imatge, 230, 230, 230); // Gris clar
$text_color = imagecolorallocate($imatge, 40, 40, 40); // Gris fosc
$soroll_color = imagecolorallocate($imatge, 150, 150, 150); // Gris mitjà
// Omplir el fons
imagefill($imatge, 0, 0, $fons_color);
// 4. Afegir Soroll (Punts i Línies)
// A. Punts aleatoris
for ($i = 0; $i < 500; $i++) {
imagesetpixel($imatge, rand(0, $amplada), rand(0, $alçada), $soroll_color);
}
// B. Línies aleatòries
for ($i = 0; $i < 5; $i++) {
imageline($imatge,
rand(0, $amplada), rand(0, $alçada), // Punt inicial
rand(0, $amplada), rand(0, $alçada), // Punt final
$soroll_color
);
}
// 5. Dibuixar Text Distorsionat
$x = 10;
$y = 30;
// Dibuixa cada caràcter de la cadena
for ($i = 0; $i < strlen($captcha_text); $i++) {
// Escollir un angle de rotació lleuger (+/- 15 graus)
$angle = rand(-15, 15);
// Moure la posició Y verticalment (desalineació)
$y_offset = rand(-5, 5);
// Utilitzem fonts TrueType (FreeType) per a millor aparença i rotació
// Cal tenir una font TrueType (TTF) disponible al servidor (ex: Arial.ttf)
// NOTA: Si no tens un fitxer TTF, utilitza la funció 'imagestring()' més simple.
// Utilitzarem imagestring() aquí per ser més bàsic i no requerir TTF:
imagestring($imatge, 5, $x, $y + $y_offset - 10, $captcha_text[$i], $text_color);
// Moure la posició X per al següent caràcter
$x += 25;
}
// 6. Sortida de la Imatge i Alliberar Memòria
header('Content-Type: image/png');
imagepng($imatge);
imagedestroy($imatge);
?>
Per mostrar el CAPTCHA, simplement inclous una etiqueta <img> que cridi al fitxer PHP:
HTML
<p>Introdueix el codi de la imatge:</p>
<img src="captcha.php" alt="Codi de seguretat">
<input type="text" name="captcha_input">
