<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/ DTD/wml_1.1.xml">

<wml>
<head>
<meta http-equiv="cache-control" content="max-age=180,private" />
</head>
<card title="PHP验证码程序：session生成图片">
<p>
作者:<a href="index.php?action=showuser&amp;userid=1&amp;hash=">xreacn</a><br />时间:2012-02-18 01:17<br />分类:<a href="index.php?action=list&amp;cid=16&amp;hash=">站点建设</a><br />内容:
正 文：



    
        
            
 

        
    


    昨天捣鼓了一下PHP验证码并生成图片程序，采用了session识别，稍微改进了一下目前网络上流传的PHP验证码，加入杂点，数字颜色随机显示，控制4位数字显示；话不多说了，程序如下，分享出来。

 


    效果图如下：

 



 


    新建yz.php验证码生成文件：

 


    注意：以下代码需要打开php的GD库，修改php.in文件的配置，把已经注释掉的行之前的分号取消即可：extension=php_gd2.dll。

 

&lt;?

session_start();

//生成验证码图片

Header(&quot;Content-type: image/PNG&quot;);

$im = imagecreate(44,18);

$back = ImageColorAllocate($im, 245,245,245);

imagefill($im,0,0,$back); //背景

 

srand((double)microtime()*1000000);

//生成4位数字

for($i=0;$i&lt;4;$i++){

$font = ImageColorAllocate($im, rand(100,255),rand(0,100),rand(100,255));

$authnum=rand(1,9);

$vcodes.=$authnum;

imagestring($im, 5, 2+$i*10, 1, $authnum, $font);

}

 

for($i=0;$i&lt;100;$i++) //加入干扰象素

{ 

$randcolor = ImageColorallocate($im,rand(0,255),rand(0,255),rand(0,255));

imagesetpixel($im, rand()%70 , rand()%30 , $randcolor);

} 

ImagePNG($im);

ImageDestroy($im);

 

$_SESSION['VCODE'] = $vcodes;

?&gt;

 


    到具体调用的地方，用这样的形式：&lt;img src=&quot;/yz.php&quot; align=&quot;absmiddle&quot; /&gt;就可以了；验证的时候验证session：$_SESSION['VCODE']的值就可以了。还可以对以上代码稍微改进，改成两个数字相加求和的形式，效果可以参见《ASP生成Bmp图片验证码：数字相加求和》。

 


    ps: 2010.4.20更新：PHP的更高级的验证码移步这里看：随机扭曲、旋转、变形（仿Google验证码）的php验证码。
</p><p>
<a href="index.php?action=login&amp;hash=">立即登陆发表评论</a><br />
</p>
<p><a href="index.php?action=list&amp;hash=">返回日志列表</a><br /><a href="index.php?action=index&amp;hash=">返回主页</a></p>
</card>
</wml>
