如何在PHP中利用会话与gd库实现一个验证码生成功能

  介绍

这篇文章将为大家详细讲解有关如何在PHP中利用会话与gd库实现一个验证码生成功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

验证码是为了防止机器灌水给网站带来污染以及增加服务器负担而出现的。目前大大小小的网站都有验证码。今天自己实现了一个简单的验证码类。说简单是因为没有加一些干扰的弧线等等,只是将文字旋转了一下。当然,因为字体的原因,要想一眼看出来并不容易。同时,为了避免字母的大小写与数字混淆,又去掉了那些看起来很像的字母数字。
类:

& lt; PHP ?/* *   ,*简单生成验证码类   ,*/class  Captcha  {   private 才能;宽度;美元//验证码宽度   private 才能;高度;美元//验证码高度   private 才能;countOfChars;美元//字符数//才能private  distrubLines美元;//干扰线条数   private 才能;木炭;美元//随机生成的字符串      public 才能;function  __construct(宽度=100,身高=30美元,countOfChars=4美元,美元distrubLines=2), {//才能初始化参数   这个美元才能→宽度=$宽度;   这个美元才能→高度=$高度;   这个美元才能→countOfChars=$ countOfChars;   session_start才能();   ,,}      ,/* *   ,,*,执行全部动作,生成验证码并直接输出   ,,*/public 才能;function 执行(){   imageHandle=这美元才能→createImage ();   这个美元才能→createChars ();   这个美元才能→drawChars ($ imageHandle);   这个美元才能→outImage ($ imageHandle);   ,,}      ,/* *   ,,*,创建画布,并随机填充颜色   ,,*,@return 返回画布句柄   ,,*/public 才能;function  createImage () {   美元才能imageHandle=, imagecreate ($ this→宽度,,$ this→高度);//才能随机背景颜色   ,,,$ randColor=imagecolorallocate (imageHandle美元,50岁,mt_rand (0, 50), mt_rand (0, 50));   imagefill才能(imageHandle美元,,0,0,,randColor美元);   return 才能;imageHandle美元;   ,,}      ,/* *   ,,*,生成随机字符   ,,*/private 才能;function  createChars () {//候才能选字符   美元才能str=& # 39; ABCDEFGHJKLMNPQRSTUVWXZabcdefghijkmnpqtuvwx2346789& # 39;;   美元才能识字课=& # 39;& # 39;;   ,,(i=0; i<美元;这美元→countOfChars;美元我+ +){   ,,,$字符。=$ str (mt_rand (0, strlen (str)美元1)];   ,,}   这→美元才能识字课=$字符;//才能保存在会话中   美元才能_SESSION[& # 39;验证码# 39;]=函数($字符);   ,,}      ,/* *   ,,*,将字符写入图像   ,,*,@param  type  imageHandle 美元;图像句柄   ,,*/private 才能;function  drawChars (imageHandle美元){   如果才能($ this→识字课!=null) {   ,,,字体=& # 39;美元/home/WWW/YuWeiLiShuFT.ttf& # 39;;   ,,,(i=0; i<美元;strlen ($ this→字符);美元我+ +){   ,,,颜色=美元,imagecolorallocate (imageHandle美元,mt_rand (50, 200), mt_rand (100,, 255), 255);   ,,,imagefttext (imageHandle美元,30日,30日,我* 20 + 10美元,25美元的颜色,字体,美元$ this→字符[$ i]);   ,,,}   ,,}   ,,}      ,/* *   ,,*,输出图像   ,,*,@param  type  imageHandle 美元;图像句柄   ,,*/private 才能;function  outImage (imageHandle美元){   imagepng才能($ imageHandle);   imagedestroy才能($ imageHandle);   ,,}      ,/* *   ,,*,判断用户输入的验证码是否正确   ,,*,@param  type  usrInput 美元;用户的输入   ,,*,@return  boolean 验证码是否匹配   ,,*/public 才能;static  function “染指”(usrInput美元){   如果才能(收取($ _SESSION[& # 39;验证码# 39;])){   ,,,如果函数((usrInput美元)==$ _SESSION[& # 39;验证码# 39;)){   ,,,美元_SESSION[& # 39;验证码# 39;]=零;   ,,,return 真实;   还有,,,}{   ,,,美元_SESSION[& # 39;验证码# 39;]=零;   ,,,return 假;   ,,,}   ,,}   ,,}   }

把验证设置成了静态方法,因为生成验证码后已经把验证码存到了会话中,验证时直接调用静态方法,而不需要实例化这个类了。

<强>上面的字体可以随意设置。

下面的代码讲返回一个图像,实例化验证码类后动态生成的一个图像。(outCaptcha。php)

& lt; php ?      要求(& # 39;Captcha.php& # 39;);   代码=美元,new 验证码();   头(& # 39;内容类型:图像/png # 39;);   美元代码→执行();

如何在PHP中利用会话与gd库实现一个验证码生成功能