Snippet
<?php
//
// Settings
//
$dbhost = 'localhost';
$dbuser = 'username';
$dbpass = 'password';
$database = 'database';
$min_char = 4;
$max_char = 8;
$font_dir = './*.ttf';
//
// Initial start
//
//
// Initiate image
//
header("content-type: image/png");
header("Cache-control: no-cache, no-store");
$img = imagecreate($width, $height);
$background = imagecolorallocate ($img, rand(200, 255), rand(200, 255), rand(200, 255));
//
// Compile code
//
for ($i = 0; $i < $max_char; $i++)
{
$array[] = (rand(0, 1) == 0 || count($array) < $min_char) ? ((rand(0, 1) == 0) ? $alpha : $numeric) : '';
}
//
// Query database
//
$confirm_id = (eregi('^[a-z0-9]{32}$', $_GET['id'])) ? $_GET['id'] : md5(uniqid($_SERVER['REMOTE_ADDR']));
mysql_query("DELETE FROM captcha WHERE session_id = '$session_id'");
mysql_query("INSERT INTO captcha (confirm_id, session_id, code) VALUES ('$confirm_id', '$session_id', '$code')");
//
// Create background
//
for ($i = 0; $i < rand(5, 20); $i++ )
{
$color = imagecolorallocate ($img, rand(0, 255), rand(0, 255), rand(0, 255));
$loc_x = rand(- 100, $width + 100);
$loc_y = rand(- 50, $height + 50);
$end_x = rand(- 100, $width + 100);
$end_y = rand(- 50, $height + 50);
// Background shapes
switch ($shape)
{
case 1:
// Draw an ellipse
imageellipse ($img, $loc_x, $loc_y, rand(100, 400), rand(50, 400), $color);
break;
case 2:
// Draw a rectangle
imagerectangle($img, $loc_x, $loc_y, $end_x, $end_y, $color);
break;
case 3:
// Draw a line
imageline($img, $loc_x, $loc_y, $end_x, $end_y, $color);
break;
}
}
//
// Compile image
//
$x_move = $width / (strlen($code) + 1);
$current_pos = rand(0, $x_move / 2);
$less_rotate = array('N', 'Z', '6', '9');
for ($i = 0; $i < strlen($code); $i++ )
{
$x_pos = $current_pos + rand($size + 1, $x_move);
$y_pos = $height/ 2 + rand(- 8, 8);
$current_pos = $x_pos;
$fonts = glob($font_dir);
$color = imagecolorallocate ($img, rand(0, 127), rand(0, 127), rand(0, 127));
imagettftext($img, $size, $angle, $x_pos, $y_pos, $color, $font, $code[$i]);
else
imagestring($img, 5, $x_pos, $y_pos, $code[$i], $color);
}
//
// Create image
//
imagepng($img);
imagedestroy($img);
/* ------ MySQL Query ------
CREATE TABLE captcha (
confirm_id char(32) DEFAULT '' NOT NULL,
session_id char(32) DEFAULT '' NOT NULL,
code char(8) DEFAULT '' NOT NULL,
PRIMARY KEY (session_id,confirm_id)
);
*/
?>
### TEST PAGE ###
<?php
if (isset($_POST['submit']))
{
$confirm_id = (eregi('^[a-z0-9]{32}$', $_POST['confirm_id'])) ? $_POST['confirm_id'] : '';
$result = mysql_query("SELECT * FROM captcha WHERE confirm_id = '$confirm_id' LIMIT 1");
if (!$row || $_POST['confirm'] !== $row['code'])
{
echo '<b>Invalid Code:</b>';
}
else
{
mysql_query("DELETE FROM captcha WHERE session_id = '$session_id'");
}
echo $_POST['confirm'] . '|' . $row['code'] . '<br />';
}
$confirm_id = md5(uniqid($_SERVER['REMOTE_ADDR']));
?>
<img src="captcha.php?id=<?php echo $confirm_id; ?>">
<form method="post">
<input type="hidden" name="confirm_id" value="<?php echo $confirm_id; ?>">
<input type="text" name="confirm" size="30">
<input type="submit" name="submit" value="Submit">
</form>
Copy & Paste
|