第一步:利用imagecreatetruecolor($width,$height)函数制作一个指定宽高的底图
$image=imagecreatetruecolor(100, 30);
第二步:使用imagecolorallcate($image,$red,$green,$blue)方法做指定背景颜色的填充,该方法默认是输出黑色
$bg_color=imagecolorallocate($image, 255, 255, 255); //代表白色
第三步:再将我们指定好的背景色填充到我们的底图之中
imagefill($image, 0, 0, $bg_color);
第四步:数字加字码混合验证码的制作
for($i=0;$i<4;$i++){ //循环输出四个数字 $fontsize=6;//字体的大小为6 $fontcolor=imagecolorallocate($image, rand(0, 120), rand(0,120),rand(0,120));//定义字体的颜色 $data="abcdefghijklmnopqrstuvwxyz1234567890";//定义字母和数字的组合 // $fontcontent=rand(0,9);//定义数字体的取值范围 $font_content=substr($data,rand(0, strlen($data)),1); $captch_code.="$font_content"; $x=($i*100/4)+rand(5,10); $y=rand(5, 10); imagestring($image, $fontsize, $x, $y, $font_content, $fontcolor); }
第五步:增加干扰元素(有增加点和增加线这两种干扰方式)
//增加点干扰元素 // for($i=0;$i<200;$i++){ // $pointcolor=imagecolorallocate($image, rand(0,200), rand(0, 200), rand(0,200)); // imagesetpixel($image, rand(1,99), rand(1, 29), $pointcolor);//该函数创建单一的点 // } //增加线干扰元素 for($i=0;$i<8;$i++){ $line_color=imagecolorallocate($image,rand(60, 220), rand(60, 220), rand(60, 220)); imageline($image, rand(1, 99), rand(1, 29),rand(1,99),rand(1,29), $line_color); //该内置函数是用来创建线的 // imageline($image, $x1, $y1, $x2, $y2, $color); }
第六步:用php的header()方法表名输出内容的格式为png
header('content-type:image/png');
第七步:显示图片
imagepng($image);
第八步:销毁图片以便于系统资源的回收
imagedestroy($image);
第九步:我们使用$_SESSION来存储我们的验证码
session_start();//放在一开始 $captch_code="";//用来存随机生成的验证码内容,放在第三步后面 $captch_code.="$font_content";//将随机生成的验证码赋值 $_SESSION['code']=$captch_code;//将验证码的值存入$_SESSION中,放在设置干扰元素之前
验证码的使用
form表单之中图片验证码的写法(运用了js的知识)
<img src="img.php" alt="验证码,看不清楚,换一张"onclick="this.src=this.src+'?'+new Date().getTime();"/>; //img.php是我们生成验证码的PHP程序
表单处理程序:如何验证验证码是否输入正确
if(isset($_REQUEST['code'])){ session_start(); if(strtolower($_REQUEST['code'])==$_SESSION['code']){ //这里面的内容是自己随便输入的 header('Content-type:text/html;charset=UTF8'); echo "<font color='#0000cc'>输入正确</font>"; }else{ //这里面对内容是自己随便输入的 header('Content-type:text/html;charset=UTF8'); echo "<font color='#cc0000'><b>输入错误</b></font>"; } exit(); }