Captcha con PHP

Miércoles, 5. Agosto 2009

Aqui los codes de unos captchas que hice =)

captcha solo texto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
  //hacemos un array con las lestras o numeros que queremos
  $le = array(1 => "0", 2 => "1", 3 => "2", 4 => "3", 5 => "4", 6 => "5", 7 => "6", 8 => "7", 9 => "8", 10 => "9", 11 => "a", 12 => "b", 13 => "c", 14 => "d", 15 => "e", 16 => "f", 17 => "g", 18 => "h", 19 => "i", 20 => "j", 21 => "k", 22 => "l", 23 => "m", 24 => "n", 25 => "o", 26 => "p", 27 => "q", 28 => "r", 29 => "s", 30 => "t", 31 => "u", 32 => "v", 33 => "w", 34 => "x", 35 => "y", 36 => "z", 37 => "A", 38 => "B", 39 => "C", 40 => "D", 41 => "E", 42 => "F", 43 => "G", 44 => "H", 45 => "I", 46 => "J", 47 => "K", 48 => "L", 49 => "M", 50 => "N", 51 => "O", 52 => "P", 53 => "Q", 54 => "R", 55 => "S", 56 => "T", 57 => "U", 58 => "V", 59 => "W", 60 => "X", 61 => "Y", 62 => "Z");
  //usamos la funcion rand para obtener los caracteres aleatoriamente
  $ra = rand(1, 7);
  $ra2 = rand(8, 14);
  $ra3 = rand(15, 21);
  $ra4 = rand(22, 28);
  $ra5 = rand(29, 35);
  $ra6 = rand(36, 42);
  $ra7 = rand(43, 49);
  $ra8 = rand(50, 62);
  //concatenamos los caracteres
  $capt = $le[$ra] . $le[$ra2] . $le[$ra3] . $le[$ra4] . $le[$ra5] . $le[$ra6] . $le[$ra7] . $le[$ra8];
  $_SESSION['captcha'] = $capt;
?>

Ahora para implementarlo seria asi:

1
2
3
4
5
6
7
8
9
10
<?php
  echo "<br>" . $capt . "
<br />
<form action=\"\" method=\"POST\">
<input type=\"text\" name=\"captcha\" size=\"8\" maxlength=\"8\" />
<br />
<br />
<input type=\"submit\" value=\"asd =)\" />
</form>"
;
?>

Para comprobar el captcha:

1
2
3
4
5
6
<?php
  $captcha = htmlspecialchars(trim($_POST['captcha']));
  if ($captcha != $_SESSION['captcha']) {
      echo "El captcha es incorrecto<br><a href=javascript:history.back()>Regresar</a>";
  }
?>

Haciendo captcha con una imagen, es lo mismo solo creamos una imagen.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
  header("Content-type: image/png");
  //hacemos un array con las lestras o numeros que queremos
  $le = array(1 => "0", 2 => "1", 3 => "2", 4 => "3", 5 => "4", 6 => "5", 7 => "6", 8 => "7", 9 => "8", 10 => "9", 11 => "a", 12 => "b", 13 => "c", 14 => "d", 15 => "e", 16 => "f", 17 => "g", 18 => "h", 19 => "i", 20 => "j", 21 => "k", 22 => "l", 23 => "m", 24 => "n", 25 => "o", 26 => "p", 27 => "q", 28 => "r", 29 => "s", 30 => "t", 31 => "u", 32 => "v", 33 => "w", 34 => "x", 35 => "y", 36 => "z", 37 => "A", 38 => "B", 39 => "C", 40 => "D", 41 => "E", 42 => "F", 43 => "G", 44 => "H", 45 => "I", 46 => "J", 47 => "K", 48 => "L", 49 => "M", 50 => "N", 51 => "O", 52 => "P", 53 => "Q", 54 => "R", 55 => "S", 56 => "T", 57 => "U", 58 => "V", 59 => "W", 60 => "X", 61 => "Y", 62 => "Z");
  //usamos la funcion rand para obtener los caracteres aleatoriamente
  $ra = rand(1, 7);
  $ra2 = rand(8, 14);
  $ra3 = rand(15, 21);
  $ra4 = rand(22, 28);
  $ra5 = rand(29, 35);
  $ra6 = rand(36, 42);
  $ra7 = rand(43, 49);
  $ra8 = rand(50, 62);
  //concatenamos los caracteres
  $capt = $le[$ra] . $le[$ra2] . $le[$ra3] . $le[$ra4] . $le[$ra5] . $le[$ra6] . $le[$ra7] . $le[$ra8];
  $im = imagecreate(100, 30);
  $fondo = imagecolorallocate($im, 255, 255, 255);
  $color_texto = imagecolorallocate($im, 60, 179, 113);
  imagestring($im, 5, 0, 0, $capt, $color_texto);
  imagepng($im);
?>

Leave a Reply