php生成图形验证码几种方法总结
生成图形验证码需要使用php GD库来生成,如果你没开户GD库我们需要在php.ini文件找到extension=php_gd2.dll 去掉前面的;就行了,然后重启apache 或iis环境即可.
我们先来检查一下自己的php是不是打开了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($im, mt_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($im, mt_rand(0, 255) , mt_rand(0, 255) , mt_rand(0, 255)); imagearc($im, mt_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($im, mt_rand(0, 255) , mt_rand(0, 255) , mt_rand(0, 255)); imagesetpixel($im, mt_rand(0, $width) , mt_rand(0, $height) , $font_color); } // 画验证码 @imagefttext($im, $size, 0, 5, $size + 3, $text_color, 'c:WINDOWSFontssimsun.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; while ($i < $characters_on_image) { $code.= substr($possible_letters, mt_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($image, mt_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($image, mt_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 ); } ?>
个人推荐推荐第二个生成验证码程序代码,各位同学可尝试参考对比,最后一个是W3C标准生成的也是利用了php gd库.
教程地址:http://www.phprm.com/tuxiang/fs4410.html
欢迎转载!但请带上文章地址^^