博客列表 >PHP实现验证码的制作

PHP实现验证码的制作

蓝谑的博客
蓝谑的博客原创
2018年02月22日 10:11:09798浏览
  • 第一步:利用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();
	}

  



声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议