插件34:检查验证字/验证码

<?php // Plug-in 34: Check Captcha

// This is an executable example with additional code supplied
// To obtain just the plug-ins please click on the Download link

$salt1   = substr(md5(rand()), 0, 5);
$salt2   = substr(md5(rand()), 0, 5);
$result  = PIPHP_CreateCaptcha(26, rand(4,8), 'captcha.ttf',
   '', $salt1, $salt2);
$captcha = $result[0];
$token   = $result[1];
$image   = $result[2];

echo "The Captcha is '$captcha', the token is:<br />";
echo "'$token', and the image is in:<br />$image:<br />";
echo "<img src=\"$image\"><br />";
ob_flush(); flush(); sleep(2); // Wait for image to display

$guess = "letmein";
$test  = PIPHP_CheckCaptcha($guess, $token,
   $salt1, $salt2);
if ($test == TRUE) echo "Captcha '$guess' passed<br />";
else echo "Captcha '$guess' failed<br />";

$test = PIPHP_CheckCaptcha($captcha, $token,
   $salt1, $salt2);
if ($test == TRUE) echo "Captcha '$captcha' passed";
else echo "Captcha '$captcha' failed";

function PIPHP_CheckCaptcha($captcha, $token,
   $salt1, $salt2)
{
   // Plug-in 34: Check Captcha
   //
   // This plug-in takes a Captcha string as entered by a user,
   // along with a special token and filename to verify the user
   // as human. The plug-in returns TRUE if the Captcha matches,
   // otherwise FALSE. The arguments required are:
   //
   //    $captcha: Captcha as typed by user
   //    $token:   Token supplied by CreateCaptcha
   //    $salt1:   Same as supplied to CreateCaptcha
   //    $salt2:   Same as supplied to CreateCaptcha
   
   return $token == md5("$salt1$captcha$salt2");
}

// The plug-ins below are in this file to ensure they
// are available to the main plug-in which uses them

function PIPHP_CreateCaptcha($size, $length, $font,
   $folder, $salt1, $salt2)
{
   // Plug-in 33: Create Captcha
   //
   // This plug-in creates a GIF image containing a word the
   // user must type in to prove they are not a program. The
   // function returns a three element array containing the
   // following:
   //
   //    Element 0: The Captcha word to be entered
   //    Element 1: A unique 32 character token
   //    Element 2: The location of a GIF file with the Captcha
   //               text
   //
   // The function expects a file dictionary.txt to exist in the
   // current folder. This must be a text file of words separated
   // by \r\n carriage return, line feed pairs. The arguments
   // required are:
   //
   //    $size:   Font size for the Captcha
   //    $length: Length of Captcha in letters
   //    $font:   Location of a TrueType font
   //    $folder: Location of a temporary, web-
   //             accessible folder to store the
   //             captcha GIF. Must end with /
   //    $salt1:  A sequence of characters to help
   //             make the Captcha uncrackable
   //    $salt2:  A second sequence to make it even
   //             less crackable

   $file    = file_get_contents('dictionary.txt');
   $temps   = explode("\r\n", $file);
   $dict    = array();

   foreach ($temps as $temp)
      if (strlen($temp) == $length)
         $dict[] = $temp;

   $captcha = $dict[rand(0, count($dict) - 1)];
   $token   = md5("$salt1$captcha$salt2");
   $fname   = "$folder" . $token . ".gif";
   PIPHP_GifText($fname, $captcha, $font, $size, "444444",
      "ffffff", $size / 10, "666666");
   $image   = imagecreatefromgif($fname);
   $image   = PIPHP_ImageAlter($image, 2);
   $image   = PIPHP_ImageAlter($image, 13);
   
   for ($j = 0 ; $j < 3 ; ++$j)
      $image = PIPHP_ImageAlter($image, 3);
   for ($j = 0 ; $j < 2 ; ++$j)
      $image = PIPHP_ImageAlter($image, 5);

   imagegif($image, $fname);
   return array($captcha, $token, $fname);
}

function PIPHP_GifText($file, $text, $font, $size, $fore, $back,
   $shadow, $shadowcolor)
{
   // Plug-in 19: Gif Text
   //
   // This plug-in accepts text input and then turns it into
   // a gif image. Various font sizes and effects are available
   // The arguments are:
   //
   //    $file:        The path and file to save the finished gif
   //    $text:        The text to display
   //    $font:        Filename of a TTF font file
   //    $size:        Font size to use
   //    $fore:        The foreground color
   //    $back:        The background color
   //    $shadow:      0 = None, 1 or more = The offset to use
   //    $shadowcolor: The shadow color (if selected)

   $bound  = imagettfbbox($size, 0, $font, $text);
   $width  = $bound[2] + $bound[0] + 6 + $shadow;
   $height = abs($bound[1]) + abs($bound[7]) + 5 + $shadow;
   $image  = imagecreatetruecolor($width, $height);
   $bgcol  = PIPHP_GD_FN1($image, $back);
   $fgcol  = PIPHP_GD_FN1($image, $fore);
   $shcol  = PIPHP_GD_FN1($image, $shadowcolor);
   imagefilledrectangle($image, 0, 0, $width, $height, $bgcol);
   
   if ($shadow > 0) imagettftext($image, $size, 0, $shadow + 2,
      abs($bound[5]) + $shadow + 2, $shcol, $font, $text);
   
   imagettftext($image, $size, 0, 2, abs($bound[5]) + 2, $fgcol,
      $font, $text);
   imagegif($image, $file);
}

function PIPHP_GD_FN1($image, $color)
{
   return imagecolorallocate($image,
      hexdec(substr($color, 0, 2)),
      hexdec(substr($color, 2, 2)),
      hexdec(substr($color, 4, 2)));
}

function PIPHP_ImageAlter($image, $effect)
{
   // Plug-in 14: Image Alter
   //
   // This plug-in takes a GD image and modifies it
   // according to the selected effect. The arguments are:
   //
   //    $image:  The image source
   //    $effect: The effect to use between 1 and 14:
   //        1 = Sharpen
   //        2 = Blur
   //        3 = Brighten
   //        4 = Darken
   //        5 = Increase Contrast
   //        6 = Decrease Contrast
   //        7 = Grayscale
   //        8 = Invert
   //        9 = Increase Red
   //       10 = Increase Green
   //       11 = Increase Blue
   //       12 = Edge Detect
   //       13 = Emboss
   //       14 = Sketchify

   switch($effect)
   {
      case 1:  imageconvolution($image, array(array(-1, -1, -1),
                  array(-1, 16, -1), array(-1, -1, -1)), 8, 0);
               break;
      case 2:  imagefilter($image,
                  IMG_FILTER_GAUSSIAN_BLUR); break;
      case 3:  imagefilter($image,
                  IMG_FILTER_BRIGHTNESS, 20); break;
      case 4:  imagefilter($image,
                  IMG_FILTER_BRIGHTNESS, -20); break;
      case 5:  imagefilter($image,
                  IMG_FILTER_CONTRAST, -20); break;
      case 6:  imagefilter($image,
                  IMG_FILTER_CONTRAST, 20); break;
      case 7:  imagefilter($image,
                  IMG_FILTER_GRAYSCALE); break;
      case 8:  imagefilter($image,
                  IMG_FILTER_NEGATE); break;
      case 9:  imagefilter($image,
                  IMG_FILTER_COLORIZE, 128, 0, 0, 50); break;
      case 10: imagefilter($image,
                  IMG_FILTER_COLORIZE, 0, 128, 0, 50); break;
      case 11: imagefilter($image,
                  IMG_FILTER_COLORIZE, 0, 0, 128, 50); break;
      case 12: imagefilter($image,
                  IMG_FILTER_EDGEDETECT); break;
      case 13: imagefilter($image,
                  IMG_FILTER_EMBOSS); break;
      case 14: imagefilter($image,
                  IMG_FILTER_MEAN_REMOVAL); break;
   }
   
   return $image;
}

?>

插件说明:插件将对用户输入的验证字进行验证。这个验证字是由插件33创建的。插件34需要以下参数:

$captcha 用户输入的验证字

$token代表当前验证字的标志

$salt1第一个salt字符串

$salt2第二个salt字符串

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值