php实现自动生成验证码的实例讲解

现在验证码在表单中的应用越来越多了,但是如果用js来实现总觉得不太方便,因此使用php来实现下,在此记录下。
【php实现自动生成验证码的实例讲解】当然,我们也可以封装成一个函数,以后使用的时候也是很方便的,这里并未封装,感兴趣的小伙伴可以自己封装下。
具体实现代码:
新建一个cap_sz.php文件:


实例扩展:
createPNG(); class idCode{private $words = array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','0','1','2','3','4','5','6','7','8','9'); private $fonts; private $count; //验证码字符数private $height; private $width; private $path = '..\myfolder\fonts'; private $keys; //构造函数public function __construct($count,$width,$height){$this->count = $count; $this->getFonts(); $this->height = $height; $this->width = $width; }private function getFonts(){$dir = dir($this->path); while(false !== ($file = $dir->read())){if($file != '.' && $file != '..'){$this->fonts[count($this->fonts)] = basename($file); }}$dir->close(); }private function createKeys(){for($i = 0; $i < $this->count; $i++){$this->keys[$i]['char'] = $this->words[rand(0,count($this->words)-1)]; //使用字体路径标识$this->keys[$i]['filename'] = $this->path.'\\'.$this->fonts[rand(0,count($this->fonts)-1)]; }}public function createPNG(){$this->createKeys(); //创建画布以及颜色块儿$bg = imagecreatetruecolor($this->width + 10*2,$this->height + 3*2); //两边留10px空白,上下3px$grey = imagecolorallocate($bg,155,155,155); $blue = imagecolorallocate($bg,0x00,0x00,0xff); //填充背景imagefill($bg,0,0,$grey); //添加字符$pwidth = $this->width/$this->count; $x; $y; for($i = 0; $i < $this->count; $i++){$rotation = rand(-40,40); //偏转角度±40°$fontsize = 33; $width_txt; $height_txt; do{$fontsize--; $bbox = imagettfbbox($fontsize,$rotation,$this->keys[$i]['filename'],$this->keys[$i]['char']); $width_txt = $bbox[2] - $bbox[0]; //x 0 2 4 6,y1 3 5 7; 左下,右下,右上,左上$height_txt = $bbox[7] - $bbox[1]; }while($fontsize > 8 && ($height_txt > $this->height || $width_txt > $pwidth)); $fontcolor = imagecolorallocate($bg,rand(0,255),rand(0,255),rand(0,255)); $x = 8 + $pwidth*$i + $pwidth/2 - $width_txt/2; //x坐标基本位置$y = $this->height/2 - $height_txt/2; imagettftext($bg,$fontsize,$rotation,$x,$y,$fontcolor,$this->keys[$i]['filename'],$this->keys[$i]['char']); }//绘制干扰线//根据字体酌情增加干扰线imageline($bg,0,15,40,10,$blue); //图像输出头文件header('Content-type:image/png'); //输出png图像imagepng($bg); //清除缓存资源imagedestroy($bg); }public function checkKeys($input){if(count($input)!=$this->count){return 'ERROR:长度不正确.'; }else{for($i=0; $i < $this->count; $i++){//0 o O I l 1 校准,根据所选择的字体确定是否需要手动校准if($input[$i] != $this->keys[$i]['char']){return 'SUCCESS.'; }else{return 'ERROR:请输入正确验证码.'; }}}}}?>

到此这篇关于php实现自动生成验证码的实例讲解的文章就介绍到这了,更多相关php实现自动生成验证码的方法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    推荐阅读