PHP制作简单的验证码验证

本文涉及的产品
图片翻译,图片翻译 100张
语种识别,语种识别 100万字符
文本翻译,文本翻译 100万字符
简介:  验证码(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自动区分计算机和人类的图灵测试)的缩写,是一种区分用户是计算机还是人的公共全自动程序。

什么是验证码❓

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

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

<!DOCTYPE html><html><head><metacharset="utf-8"><title></title></head><body><formmethod="post"action="">    验证码:
<inputtype="text"size="10"name="a"/><imgsrc="next1.php"/>  //跳转到后端的图像
<inputtype="submit"name="submit"value="提交"/></form></body><?phpsession_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>

image.gif

验证码生成的后端代码

<?phpsession_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);
?>

image.gif

运行结果

image.gif

验证效果的演示

image.gif

遇到的问题

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

image.gif

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

可以检测报错

乱码是因为头文件

image.gif

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

同时还要注意php的版本

避免出现以下情况

image.gif

解决办法

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

目录
相关文章
|
4月前
|
设计模式 数据库连接 PHP
PHP中的设计模式:提升代码的可维护性与扩展性在软件开发过程中,设计模式是开发者们经常用到的工具之一。它们提供了经过验证的解决方案,可以帮助我们解决常见的软件设计问题。本文将介绍PHP中常用的设计模式,以及如何利用这些模式来提高代码的可维护性和扩展性。我们将从基础的设计模式入手,逐步深入到更复杂的应用场景。通过实际案例分析,读者可以更好地理解如何在PHP开发中应用这些设计模式,从而写出更加高效、灵活和易于维护的代码。
本文探讨了PHP中常用的设计模式及其在实际项目中的应用。内容涵盖设计模式的基本概念、分类和具体使用场景,重点介绍了单例模式、工厂模式和观察者模式等常见模式。通过具体的代码示例,展示了如何在PHP项目中有效利用设计模式来提升代码的可维护性和扩展性。文章还讨论了设计模式的选择原则和注意事项,帮助开发者在不同情境下做出最佳决策。
|
5月前
|
JavaScript NoSQL Redis
Vue中实现修改邮箱、手机号等流程的大致过程、验证码由后端的redis生成验证(版本1.0)
这篇文章记录了在Vue中实现修改手机号和邮箱的大致流程,包括使用过滤器部分隐藏展示的手机号和邮箱,以及通过点击触发路由跳转的便捷方式。文章还描述了旧号码和新号码验证的界面实现,其中验证码由后端生成并通过弹窗展示给用户,未来可以接入真正的手机验证码接口。此外,还提供了修改邮箱的页面效果截图,并强调了学习是一个永无止境的过程。
Vue中实现修改邮箱、手机号等流程的大致过程、验证码由后端的redis生成验证(版本1.0)
|
2月前
|
SQL 安全 PHP
PHP开发中防止SQL注入的方法,包括使用参数化查询、对用户输入进行过滤和验证、使用安全的框架和库等,旨在帮助开发者有效应对SQL注入这一常见安全威胁,保障应用安全
本文深入探讨了PHP开发中防止SQL注入的方法,包括使用参数化查询、对用户输入进行过滤和验证、使用安全的框架和库等,旨在帮助开发者有效应对SQL注入这一常见安全威胁,保障应用安全。
82 4
|
3月前
jcaptcha集群时验证码不能验证的问题
jcaptcha集群时验证码不能验证的问题
47 3
|
3月前
|
存储 前端开发 Java
验证码案例 —— Kaptcha 插件介绍 后端生成验证码,前端展示并进行session验证(带完整前后端源码)
本文介绍了使用Kaptcha插件在SpringBoot项目中实现验证码的生成和验证,包括后端生成验证码、前端展示以及通过session进行验证码校验的完整前后端代码和配置过程。
462 0
验证码案例 —— Kaptcha 插件介绍 后端生成验证码,前端展示并进行session验证(带完整前后端源码)
|
8月前
|
JavaScript Java
java生成验证码并进行验证
java生成验证码并进行验证
|
5月前
|
存储 NoSQL Java
使用redis进行手机验证码的验证、每天只能发送三次验证码 (redis安装在虚拟机linux系统中)
该博客文章展示了如何在Linux虚拟机上使用Redis和Jedis客户端实现手机验证码的验证功能,包括验证码的生成、存储、验证以及限制每天发送次数的逻辑,并提供了测试结果截图。
使用redis进行手机验证码的验证、每天只能发送三次验证码 (redis安装在虚拟机linux系统中)
|
5月前
|
安全 Java 云计算
JSF 应用究竟何去何从?云端部署能否成为其全新突破点?快来一探究竟!
【8月更文挑战第31天】本文介绍了将JavaServer Faces(JSF)应用部署到云平台的过程。首先,根据成本、功能、可靠性和安全性选择合适的云平台。接着,展示了构建简单JSF应用的示例代码。最后,以AWS Elastic Beanstalk为例,详细说明了部署流程。部署至云端可提升应用的可用性、扩展性和安全性。
59 0
|
7月前
|
PHP
php生成验证码
php生成验证码
29 0
|
7月前
|
前端开发 JavaScript
阿里云验证码2.0 验证时报错 前端页面获取的验证参数有问题,动态JS加载失败,请问怎么解决啊?急,急,急。
用户反馈校验时遇到错误,日志显示验证码参数获取异常。采用无痕验证,失败后,返回`{captchaResult:false,bizResult:false}`,未触发滑块二次验证。