PHP制作简单的验证码验证

本文涉及的产品
文档翻译,文档翻译 1千页
图片翻译,图片翻译 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 ,将其前面的 ‘;’ 去掉即可

目录
相关文章
|
20天前
|
安全 Java 云计算
JSF 应用究竟何去何从?云端部署能否成为其全新突破点?快来一探究竟!
【8月更文挑战第31天】本文介绍了将JavaServer Faces(JSF)应用部署到云平台的过程。首先,根据成本、功能、可靠性和安全性选择合适的云平台。接着,展示了构建简单JSF应用的示例代码。最后,以AWS Elastic Beanstalk为例,详细说明了部署流程。部署至云端可提升应用的可用性、扩展性和安全性。
30 0
|
3月前
|
PHP
php生成验证码
php生成验证码
17 0
|
前端开发 JavaScript 机器人
用PHP实现了一个极验验证功能,如何做?具体代码如何写?
极验验证是一种防机器人的验证机制,可以通过图像识别等方式来判断用户是否为真实用户。
154 1
|
安全 PHP
PHP - Laravel 表单验证(验证规则与使用 $this->validate()、Validator::make()、Requests)
PHP - Laravel 表单验证(验证规则与使用 $this->validate()、Validator::make()、Requests)
229 0
|
4月前
|
安全 Linux 测试技术
PHP环境配置和验证
PHP环境配置和验证
55 0
|
9月前
|
PHP 数据库
【PHP学习】—PHP连接数据库实现表单页面的验证功能(七)
【PHP学习】—PHP连接数据库实现表单页面的验证功能(七)
|
11月前
|
前端开发 JavaScript API
php的短信验证的流程,如何实现前端js加后端php
php的短信验证的流程,如何实现前端js加后端php
102 0
|
存储 算法 前端开发
php动态密码和加密解密函数的使用(动态密码、Discuz核心函数AuthCode、任意输入密码验证)
php动态密码和加密解密函数的使用(动态密码、Discuz核心函数AuthCode、任意输入密码验证)
220 0
php动态密码和加密解密函数的使用(动态密码、Discuz核心函数AuthCode、任意输入密码验证)
|
前端开发 中间件 API
PHP - Laravel CSRF 介绍与用法(及取消 CSRF 验证)
PHP - Laravel CSRF 介绍与用法(及取消 CSRF 验证)
205 0
|
JSON 前端开发 安全
ajax中实现访问url已阅即焚的解决方案(url动态参数、变量加密、常量不变、php加密解密、API访问验证方式)
ajax中实现访问url已阅即焚的解决方案(url动态参数、变量加密、常量不变、php加密解密、API访问验证方式)
253 0