PHP的验证码

来源:互联网 发布:资金管理股票知乎 编辑:程序博客网 时间:2024/04/29 06:52

在开发网站的过程中,验证码应该是表单里时常需要的一个功能块,可是说起GD库函数,那真是长,不对照手册,根本记不住。所以抽出时间总结了一下,以后也好重复利用,提高效率,若是其中有不完善的地方,还望各位前辈及大神指出~~

<?php/*** 构造方法用来实例化验证码对象* @author xiaohuixiong* @version 版本1.0 | 2013-11-05 * @param int $codeNum | 验证码中字符个数,默认为4个* @param int $width | 验证码图片宽度,默认为80像素* @param int $height | 验证码图片高度,默认为25像素 **/vcode();function vcode($codeNum=4, $width=80, $height=25){//获取随机的验证码串$code = getCode($codeNum);//创建一个画布$im = imagecreatetruecolor($width, $height);//创建要用到的颜色$backgroundColor = imagecolorallocate($im, 255, 255, 255);$borderColor = imagecolorallocate($im, 200, 200, 200);//画背景imagefilledrectangle($im, 0, 0, $width, $height,$backgroundColor);//画边框imagerectangle($im, 0, 0, $width-1, $height-1, $borderColor);//画干扰点for($i=0; $i<50; $i++){$pointColor = imagecolorallocate($im, rand(0,128), rand(0,128), rand(0,128));imagesetpixel($im, rand(0,$width), rand(0,$height), $pointColor);}//画干扰线for($i=0; $i<5; $i++){$lineColor = imagecolorallocate($im, rand(0,255), rand(0,255), rand(0,255));imagearc($im, mt_rand(-$width,$width), mt_rand(-$height,$height), mt_rand(30,$width), mt_rand(20,$height), mt_rand(0,360), mt_rand(0,360), $lineColor);}//画字符for($i=0; $i<strlen($code); $i++){$fontColor = imagecolorallocate($im, rand(0,128), rand(0,128), rand(0,128));$fontSize = rand(18,24);$x = floor($width/$codeNum)*$i+3;$y = rand(0,$height-$fontSize);imagechar($im, $fontSize, $x, $y, $code[$i], $fontColor);}//将随机的字符存入SESSION$_SESSION['vcode'] = $code;//输出图像outImg($im);//销毁图像资源(释放内存)imagedestroy($im);exit;}//获取验证码串function getCode($codeNum){$str = "3456789abcdefghjkmnpkrstuvwxyABCDEFGHJKMNPQRSTUVWXY";$code = "";for($k=0; $k<$codeNum; $k++){$code.= $str[rand(0,strlen($str)-1)];}return $code;}//检测GD支持的图像类型,并输出图像function outImg($im){if(imagetypes() & IMG_PNG){header("Content-Type: image/png");imagepng($im);}elseif(imagetypes() & IMG_JPG){header("Content-Type: image/jpeg");imagejpeg($im);}elseif(imagetypes() & IMG_GIF){header("Content-Type: image/gif");imagegif($im);}elseif(imagetypes() & IMG_WBMP){header("Content-Type: image/vnd.wap.wbmp");imagewbmp($im);}else{die("不支持图像创建!");}}




原创粉丝点击