php 图形验证码的3种方法

生成图形验证码需要使用php GD库来生成,如果你没开户GD库我们需要在php.ini文件找到extension=php_gd2.dll 去掉前面的;就行了,然后重启apache 或iis环境即可
检查是否打开了gd库。
<?php
if( extension_loaded('gd')) {
   echo '你可以使用gd<br>';
   foreach(gd_info()  as  $cate=> $value)
     echo " $cate$value<br>";
} else
   echo '未安装gd扩展';
?>
如果有返回信息就正确可以常用使用了
例1
<?php
/* *
 * vCode(m,n,x,y) m个数字  显示大小为n   边宽x   边高y
 * 自己改写记录session $code
 
*/
session_start();
vCode(4, 15);  // 4个数字,显示大小为15
function vCode( $num = 4,  $size = 20,  $width = 0,  $height = 0) {
 ! $width &&  $width =  $num *  $size * 4 / 5 + 5;
 ! $height &&  $height =  $size + 10;
  //  去掉了 0 1 O l 等
  $str = "23456789abcdefghijkmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVW";
  $code = '';
  for ( $i = 0;  $i <  $num$i++) {
   $code .=  $str[ mt_rand(0,  strlen( $str)-1)];
 }
  //  画图像
  $im = imagecreatetruecolor( $width$height);
  //  定义要用到的颜色
  $back_color = imagecolorallocate( $im, 235, 236, 237);
  $boer_color = imagecolorallocate( $im, 118, 151, 199);
  $text_color = imagecolorallocate( $immt_rand(0, 200),  mt_rand(0, 120),  mt_rand(0, 120));
  //  画背景
 imagefilledrectangle( $im, 0, 0,  $width$height$back_color);
  //  画边框
 imagerectangle( $im, 0, 0,  $width-1,  $height-1,  $boer_color);
  //  画干扰线
  for( $i = 0; $i < 5; $i++) {
   $font_color = imagecolorallocate( $immt_rand(0, 255),  mt_rand(0, 255),  mt_rand(0, 255));
  imagearc( $immt_rand(-  $width$width),  mt_rand(-  $height$height),  mt_rand(30,  $width * 2),  mt_rand(20,  $height * 2),  mt_rand(0, 360),  mt_rand(0, 360),  $font_color);
 }
  //  画干扰点
  for( $i = 0; $i < 50; $i++) {
   $font_color = imagecolorallocate( $immt_rand(0, 255),  mt_rand(0, 255),  mt_rand(0, 255));
  imagesetpixel( $immt_rand(0,  $width),  mt_rand(0,  $height),  $font_color);
 }
  //  画验证码
 @imagefttext( $im$size , 0, 5,  $size + 3,  $text_color, 'c:\WINDOWS\Fonts\simsun.ttc',  $code);
  $_SESSION["VerifyCode"]= $code;
  header("Cache-Control: max-age=1, s-maxage=1, no-cache, must-revalidate");
  header("Content-type: image/png;charset=gb2312");
 imagepng( $im);
 imagedestroy( $im);
}
?>
例2
使用PHP,结合session和GD库扩展开发的一个生成验证码的例子(w3c推荐),可以很方便的用于项目中。而且样式美观
<?php
// 首先开启session
session_start();
// 定义前台显示验证码长&宽
$image_width = 120;
$image_height = 40;
$characters_on_image = 6;
$font = './monofont.ttf';
// The characters that can be used in the CAPTCHA code.
//avoid confusing characters (l 1 and i for example)

$possible_letters = '23456789bcdfghjkmnpqrstvwxyz';
$random_dots = 10;
$random_lines = 30;
$captcha_text_color="0x142864";
$captcha_noice_color = "0x142864";
// 定义要生成验证码的字符串
$code = '';
$i = 0; //by www.jbxue.com
while ( $i <  $characters_on_image) {
$code .=  substr( $possible_lettersmt_rand(0,  strlen( $possible_letters)-1), 1);
$i++;
}
$font_size =  $image_height * 0.75;
$image = @imagecreate( $image_width$image_height);
/*  setting the background, text and noise colours here  */
$background_color = imagecolorallocate( $image, 255, 255, 255);
$arr_text_color = hexrgb( $captcha_text_color);
$text_color = imagecolorallocate( $image$arr_text_color['red'],
         $arr_text_color['green'],  $arr_text_color['blue']);
$arr_noice_color = hexrgb( $captcha_noice_color);
$image_noise_color = imagecolorallocate( $image$arr_noice_color['red'],
         $arr_noice_color['green'],  $arr_noice_color['blue']);
/*  generating the dots randomly in background  */
for$i=0;  $i< $random_dots$i++ ) {
imagefilledellipse( $imagemt_rand(0, $image_width),
  mt_rand(0, $image_height), 2, 3,  $image_noise_color);
}
/*  generating lines randomly in background of image  */
for$i=0;  $i< $random_lines$i++ ) {
imageline( $imagemt_rand(0, $image_width),  mt_rand(0, $image_height),
  mt_rand(0, $image_width),  mt_rand(0, $image_height),  $image_noise_color);
}
/*  create a text box and add 6 letters code in it  */
$textbox = imagettfbbox( $font_size, 0,  $font$code);
$x = ( $image_width -  $textbox[4])/2;
$y = ( $image_height -  $textbox[5])/2;
imagettftext( $image$font_size, 0,  $x$y$text_color$font ,  $code);
/*  Show captcha image in the page html page  */
header('Content-Type: image/jpeg'); //  defining the image type to be shown in browser widow
imagejpeg( $image); // showing the image
imagedestroy( $image); // destroying the image instance
//设置session,做验证

$_SESSION['6_letters_code'] =  $code;
function hexrgb ( $hexstr)
{
   $int =  hexdec( $hexstr);
   return  array("red" => 0xFF & ( $int >> 0x10),
               "green" => 0xFF & ( $int >> 0x8),
               "blue" => 0xFF &  $int);
}
推荐第二种方法。

有关php  图形验证码的例子,还可以参考:

php 仿QQ验证码

php 验证码(GD库生成验证码)
php 图片验证码
php 彩色验证码
php GD库生成验证码
php 雪花背景的验证码
php生成动态图片验证码 

你可能感兴趣的:(PHP)