PHP制作简单的验证码验证

📚文章目录

什么是验证码❓

 制作简单的前端样式,表单和验证码判断(后端) 

 验证码生成的后端代码

运行结果

 验证效果的演示

遇到的问题

 同时还要注意php的版本


什么是验证码❓

        验证码(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自动区分计算机和人类的图灵测试)的缩写,是一种区分用户是计算机还是人的公共全自动程序。可以防止:恶意破解密码、刷票、论坛灌水,有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试,实际上用验证码是现在很多网站通行的方式,我们利用比较简易的方式实现了这个功能。这个问题可以由计算机生成并评判,但是必须只有人类才能解答。由于计算机无法解答CAPTCHA的问题,所以回答出问题的用户就可以被认为是人类。

 制作简单的前端样式,表单和验证码判断(后端) 

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>

		<form method="post" action="">
		验证码:
		<input type="text" size="10" name="a"/>
		<img src="next1.php"/>  //跳转到后端的图像
		<input type="submit" name="submit" value="提交"/>
		</form>
	
	</body>
	<?php
		session_start();   //启动绘画
		if(isset($_POST["submit"])){
			
			$user=$_SESSION['string'];//服务器临时保存yzm
			$str=$_POST["a"];
			
			if(strcasecmp($str,$user)==0)   //比较  等于0 两个值就为相等
				echo "<script>alert('验证码正确!!!');</script>";
				// echo '验证码正确';
			else
			// echo '验证码有误';
				echo "<script>alert('你的验证有误,请重新输入!');</script>";
			
		}
	?>
</html>

 验证码生成的后端代码

<?php
    session_start(); 
    header('Content-type: image/gif'); 
    $image_w=100; 
    $image_h=25;
    $number=range(0,9); 
    $character=range("Z","A"); 
    $result=array_merge($number,$character); /*array_merge函数是将两个数组按先
	后的顺序合并到一起,合并到一起组成一个新的数组*/
    $string=""; 
    $len=count($result); 
    for($i=0;$i<4;$i++)
    {
        $new_number[$i]=$result[rand(0,$len-1)];
        $string=$string.$new_number[$i];
    }
    $_SESSION['string']=$string; 
    $check_image=imagecreatetruecolor($image_w,$image_h); /*创建一个画布,使用PHP的GD Library创建新的真彩色
	图像,函数返回图像资源标识符*/
    $white=imagecolorallocate($check_image, 255, 255, 255); // 设置白色的图形
    $black=imagecolorallocate($check_image, 0, 0, 0); // 设置黑色的图形  
    imagefill($check_image,0,0,$white);/*imagefill()函数在 image 图像的坐标x,y (图像左上角为0, 0) 
	处用 color 颜色执行区域填充*/
    for($i=0;$i<100;$i++)
    {
        imagesetpixel($check_image, rand(0,$image_w), rand(0,$image_h),$black);/*设置干扰,使用 
		imagesetpixel()函数给图片添加干扰点。*/
    }
    for($i=0;$i<count($new_number);$i++)
    {
        $x=mt_rand(1,8)+$image_w*$i/4;  /*该函数是产生随机值的更好选择,返回结果的
		速度是 rand() 函数的 4 倍 */
        $y=mt_rand(1,$image_h/4); //指定生成位置X、Y轴偏移量
        $color=imagecolorallocate($check_image,mt_rand(0,200),mt_rand(0,200),mt_rand(0,200));
        imagestring($check_image,5,$x,$y,$new_number[$i],$color);/*imagestring()函数是PHP中的内置函数,
		用于水平绘制字符串。此函数在给定位置绘制字符串*/
    }
    imagepng($check_image);//以PNG格式将图像输出到浏览器或文件
    imagedestroy($check_image);
?>

运行结果

 验证效果的演示

遇到的问题

  当设置 header('Content-type: image/gif'); 直接运行后端验证码图片

  当设置 header('Content_type: image/gif'); 直接运行后端验证码图片

  可以检测报错

乱码是因为头文件

但运行前端代码还是可以生效

 同时还要注意php的版本

 避免出现以下情况

解决办法

进入php.ini 找到extension=php_gd2.dll ,将其前面的 ‘;’ 去掉即可

  • 11
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 17
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黛琳ghz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值