php生成图形验证码几种方法小结

前端之家收集整理的这篇文章主要介绍了php生成图形验证码几种方法小结前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我们先来检查一下自己的PHP是不是打开了gd库。
<div class="codetitle"><a style="CURSOR: pointer" data="56907" class="copybut" id="copybut56907" onclick="doCopy('code56907')"> 代码如下:

<div class="codebody" id="code56907">
<?PHP
if(extension_loaded('gd')) {
echo '你可以使用gd
';
foreach(gd_info() as $cate=>$value)
echo "$cate: $value
";
}else
echo '你没有安装gd扩展';
?>

如果有返回信息就正确可以常用使用了
例1
<div class="codetitle"><a style="CURSOR: pointer" data="48621" class="copybut" id="copybut48621" onclick="doCopy('code48621')"> 代码如下:
<div class="codebody" id="code48621">
<?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),120),120));
// 画背景
imagefilledrectangle($im,$width,$height,$back_color);
// 画边框
imagerectangle($im,$width-1,$height-1,$boer_color);
// 画干扰线
for($i = 0;$i < 5;$i++) {
$font_color = imagecolorallocate($im,255),255));
imagearc($im,mt_rand(- $width,$width),mt_rand(- $height,$height),mt_rand(30,$width 2),mt_rand(20,$height 2),360),$font_color);
}
// 画干扰点
for($i = 0;$i < 50;$i++) {
$font_color = imagecolorallocate($im,255));
imagesetpixel($im,$font_color);
}
// 画验证码
@imagefttext($im,$size,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推荐),可以很方便的用于项目中。而且样式美观
<div class="codetitle"><a style="CURSOR: pointer" data="26595" class="copybut" id="copybut26595" onclick="doCopy('code26595')"> 代码如下:
<div class="codebody" id="code26595">
//首先开启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,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);
$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,$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,$image_noise_color);
}
/
create a text Box and add 6 letters code in it /
$textBox = imagettfbBox($font_size,$font,$code);
$x = ($image_width - $textBox[4])/2;
$y = ($image_height - $textBox[5])/2;
imagettftext($image,$font_size,$x,$y,$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库。

php图形图形图形验证码验证码验证码

猜你在找的PHP相关文章