一、简单介绍验证码

1.验证码为全自动区分计算机和人类的图灵测试的缩写。是一种区分用户是计算机和人的公共全自动程序。

2.验证码主要应用场景:登录、注册确定前,发布、回复信息前,疑似机器请求时,做人/机器校验。

3.实现步骤:

(1)生成底图;

依赖php图片处理库GD,http://php.net/manual/zh/book.image.php

(2)生成验证内容;

产生随机数,使用php函数rand();

(3)生成验证码图片;

(4)校验验证内容

需要php操作SESSION基础,将验证内容保存在服务器端;前端Ajax基础

4.开发前的准备:

(1)php运行环境(我用的是Laragon);

在www目录下新建一个文件夹test,新建一个test.php文件

<?phpecho "hello,world!!";

启动Laragon,查看页面:

(2)检查PHP是否支持GD,通过在php文件中使用函数 phpinfo()输出查看即可。

在test1.php中写入函数

<?phpphpinfo();

刷新页面,在出现的也页面,搜索gd,查看是否支持,若不支持,请自行百度寻找方法:


二、php实现验证码---数字验证码

1.新建一个captcha.php文件,写入下列代码。实现验证码图片:

<?php//必须至于顶部,多服务器端记录验证码信息,便于用户输入后做校验session_start();//默认返回的是黑色的照片$image = imagecreatetruecolor(100, 30);//将背景设置为白色的$bgcolor = imagecolorallocate($image, 255, 255, 255);//将白色铺满地图imagefill($image, 0, 0, $bgcolor);//空字符串,每循环一次,追加到字符串后面  $captch_code='';//验证码为随机四个数字for ($i=0; $i < 4; $i++) { $fontsize=6;$fontcolor=imagecolorallocate($image,rand(0,120),rand(0,120),rand(0,120));//产生随机数字0-9$fontcontent = rand(0,9);$captch_code.= $fontcontent;//数字的位置,0,0是左上角。不能重合显示不完全$x=($i*100/4)+rand(5,10);$y=rand(5,10);imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor);}$_SESSION['authcode'] = $captch_code;
//为验证码增加干扰元素,控制好颜色,
//点   for ($i=0; $i < 200; $i++) { $pointcolor = imagecolorallocate($image,rand(50,200),rand(50,200),rand(50,200));imagesetpixel($image, rand(1,99), rand(1,29), $pointcolor);}//为验证码增加干扰元素
//线   for ($i=0; $i < 3; $i++) { $linecolor = imagecolorallocate($image,rand(80,220),rand(80,220),rand(80,220));imageline($image, rand(1,99), rand(1,29),rand(1,99), rand(1,29) ,$linecolor);}header('content-type:image/png');imagepng($image);//销毁imagedestroy($image);

查看效果如下:刷新一次,内容或会变化一次

2.新建一个form.php文件,写入下列代码。实现校验:

<?phpif (isset($_REQUEST['authcode'])) {session_start();if (strtolower($_REQUEST['authcode'])==$_SESSION['authcode']) {echo'<font color ="#0000CC"> 输出正确</font>';# code...}else{echo $_REQUEST['authcode'];echo $_SESSION['authcode'];echo'<font color ="#CC0000"> 输出错误</font>';}exit();}
?><!DOCTYPE html>
<html><head><meta charset="utf-8" /><title>确认验证码</title></head><body><form method="" ="post" action="./form.php"><p>验证码图片:<img  id="captcha_img" border="1" src="./captcha.php?r=<?php echo rand(); ?>" alt="" width="100" height="30"><a href="javascript:void(0)" onclick="document.getElementById('captcha_img').src='./captcha.php?r='+Math.random() ">换一个?</a></p><p>请输入图片中的内容:<input type="text" name="authcode" value="" /></p><p><input type="submit" value="提交" style="padding: 6px 20px;"></p></form></body></html>

实现结果如下,点击换一个,会换一个验证码。

输入图片中内容,如果正确,提示输入正确,如果错误,提示输入错误。样式自行修改。

三、php实现验证码---数字字母验证码

1.生成验证码图片,只需将产生随机数字的代码换成产生随机数字字母的代码,其他代码与二中保持一致

//验证码为随机四个字符,数字和字母for ($i=0; $i <4 ; $i++) { $fontsize=6;$fontcolor=imagecolorallocate($image,rand(0,120),rand(0,120),rand(0,120));//子典。因为o和0,l和1冲突,所以我们字典中不包括易混淆的$data='abcdefghijkmnpqrstuvwxy3456789';$fontcontent = substr($data,rand(0,strlen($data)) ,1);$captch_code.= $fontcontent;$x=($i*100/4)+rand(5,10);$y=rand(5,10);imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor);}

效果如下:


代码中涉及的函数,读者可自行去网站 http://php.net/manual/zh/book.image.php中查看详情。

学习php验证码参考视频:https://www.imooc.com/learn/115

php学习----php实现验证码(一)相关推荐

  1. 增强版!如何深度学习识别滑动验证码缺口

    这是「进击的Coder」的第 394 篇技术分享 作者:崔庆才 来源:崔庆才丨静觅 之前的文章中其实已经提到过如何使用深度学习来识别滑动验证码缺口,文章见利用 Python 深度学习识别滑动验证码缺口 ...

  2. 利用深度学习(CNN)进行验证码(字母+数字)识别

    利用深度学习(CNN)进行验证码(字母+数字)识别_helen1313的专栏-CSDN博客 本文方法针对的验证码为定长验证码,不包含中文. 本文的思路是:1. 使用keras中预训练好的模型,在pyt ...

  3. TensorFlow练习20: 使用深度学习破解字符验证码

    验证码是根据随机字符生成一幅图片,然后在图片中加入干扰象素,用户必须手动填入,防止有人利用机器人自动批量注册.灌水.发垃圾广告等等 . 验证码的作用是验证用户是真人还是机器人:设计理念是对人友好,对机 ...

  4. 利用深度学习识别滑动验证码缺口位置

    做爬虫的同学肯定或多或少会为验证码苦恼过,在最初的时候,大部分验证码都是图形验证码.但是前几年「极验」验证码横空出世,行为验证码变得越来越流行,其中之一的形式便是滑块验证码. 滑块验证码是怎样的呢?如 ...

  5. 基于深度搜索的树路径求解_基于深度学习的自动验证码求解器

    基于深度搜索的树路径求解 计算机视觉,网络安全,深度学习(Computer Vision, Cybersecurity, Deep Learning) Disclaimer: The followin ...

  6. php学习----php实现验证码

    一.简单介绍验证码 1.验证码为全自动区分计算机和人类的图灵测试的缩写.是一种区分用户是计算机和人的公共全自动程序. 2.验证码主要应用场景:登录.注册确定前,发布.回复信息前,疑似机器请求时,做人/ ...

  7. 基于深度学习的中文验证码识别----tensorflow

    本人已有新的想法,识别率比本文高,前往https://blog.csdn.net/qq_34896470/article/details/85073562 简介: 接上一篇中文验证码的分割,这一篇继续 ...

  8. 深度学习识别滑动验证码缺口

    1. 准备工作 同样地,本节还是主要侧重于完成利用深度学习模型来识别验证码缺口的过程,所以不会侧重于讲解深度学习模型的算法,另外由于整个模型实现较为复杂,本节也不会从零开始编写代码,而是倾向于把代码提 ...

  9. gin学习——邮箱发送验证码注册用户

    qq邮箱-设置-账户 安装 go get -u github.com/jordan-wright/email go get -u github.com/garyburd/redigo/redis da ...

最新文章

  1. 爬虫,如何防止被ban之策略大集合
  2. 【JavaScript】【PPT】继承的本质
  3. Oracle数据库常用的脚本命令(一)
  4. C语言结构体的存储分配
  5. 如何通便清肠快速见效_如何三个月合理瘦身减脂
  6. 为什么TCP连接至少3次握手
  7. python preference界面设置_Python preferences
  8. 【Java】计算1+3+5+7+9和100以内的素数
  9. 安全牛《2020中国网络安全企业100强报告》发布
  10. 阿里巴巴B2B电商算法首次对外公开
  11. 百度云服务器上安装docker步骤
  12. 正则验证邮箱,手机号
  13. 又到招聘季,说说网络招聘的那些坑!!!
  14. PCIe TLP包内容 全
  15. 常用的ddos防护方式
  16. CTU Open Contest 2017 Pond Cascade
  17. php 怎么调用git,Git怎么用
  18. DBeaver(数据库管理软件) v22.0.1 使用安装教程
  19. AIX各项知识链接(IBM官网)
  20. maven打包无法彻底删除target文件夹的问题

热门文章

  1. 昨晚,前女友联系上了我。。。
  2. Whisper匿名社交为什么这么火?
  3. 原理图的设置和几个小操作-PCB系列教程3-1
  4. 信息学奥赛一本通 1283:登山(evd)
  5. 头条学院-新媒体训练营第10期 | 10.29笔记(新手入门必须要知道的5步攻略)
  6. Windows下安装BIND9
  7. springcloud学习(七)-Sidecar(多语言支持)
  8. TL-WR842无线桥接(WDS)方法及案例
  9. java filemonitor 多层_IDEA 创建多级文件夹的操作
  10. 七八十年代的玩具(让你回想起来童年的快乐生活)