PHP简单验证码功能机制实例详解


Posted in PHP onMarch 27, 2019

本文实例讲述了PHP简单验证码功能机制。分享给大家供大家参考,具体如下:

网站的安全性是开发者不可忽视的一个问题,目前使用最多的一种可以提高网站安全性的方法就是使用验证码功能机制,有的仅仅使用一个几位数字字母混乱的验证码,有的进行手机发送短信进行验证,有的使用邮箱发送邮件进行验证,但是这个验证码功能机制是如何实现的呢?下面就为大家详细解释验证码功能机制的实现思路以及简单的实现方法。

1、验证码功能机制实现思路

① 常规的验证码实现:

a、产生一张png的图片
b、为图片设置背景色
c、设置字体颜色和样式
d、产生4位数的随机的验证码
e、把产生的每个字符调整旋转角度和位置画到png图片上
f、加入噪点和干扰线防止注册机器分析原图片来恶意注册
g、输出图片
h、释放图片所占内存
i、将验证码保存到session或是数据库
j、将和输入的验证码进行对比

② 短信(邮箱)验证码机制:

a、产生4-6位数的随机的验证码
b、把产生的每个字符保存到session或是数据库
c、将验证码发送到用户的手机(邮箱)
d、用户在规定时间内进行输入
e、将验证码从session或是数据库中取出
f、将和输入的验证码进行对比验证

2、简单的实现验证码功能机制

① 新建captcha.php,写入以下代码

<?php
/**
 * =======================================
 * Created by WeiBang Technology.
 * User: Wei ZhiHua
 * Date: 2016/10/12 0020
 * Time: 下午 4:14
 * Power: 实现验证码功能
 * =======================================
 */
//开启session
session_start();
//创建一个大小为 100*30 的验证码
$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));
  $data = 'abcdefghijkmnpqrstuvwxy3456789';
  $fontcontent = substr($data, rand(0, strlen($data) - 1), 1);
  $captch_code .= $fontcontent;
  $x = ($i * 100 / 4) + rand(5, 10);
  $y = rand(5, 10);
  imagestring($image, $fontsize, $x, $y, $fontcontent, $fontcolor);
}
//就生成的验证码保存到session
$_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);
?>

② 新建form.php,写入以下代码

<?php
/**
 * =======================================
 * Created by WeiBang Technology.
 * User: Wei ZhiHua
 * Date: 2016/10/12 0021
 * Time: 下午 4:14
 * Power: 实现验证码功能
 * =======================================
 */
if (isset($_REQUEST['authcode'])) {
  session_start();
  if (strtolower($_REQUEST['authcode']) == $_SESSION['authcode']) {
    echo "输入正确!";
  } else {
    echo "输入错误!";
  }
  exit();
}
?>
<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="content-type" content="text/html;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(); ?>" width=100 height=30>
    <a href="javascript:void(0)" rel="external nofollow" 
      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验证码的制作思路和实现方法,从简单到复杂,可以根据这些写出非常完美的验证码功能机制。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP数据缓存技术
Feb 14 PHP
PHP 命令行参数详解及应用
May 18 PHP
解析php中两种缩放图片的函数,为图片添加水印
Jun 14 PHP
一个漂亮的php验证码类(分享)
Aug 06 PHP
PHP file_get_contents设置超时处理方法
Sep 30 PHP
PHP防止表单重复提交的几种常用方法汇总
Aug 19 PHP
Symfony2开发之控制器用法实例分析
Feb 05 PHP
Laravel中Trait的用法实例详解
Mar 16 PHP
PHP微信API接口类
Aug 22 PHP
php实现评论回复删除功能
May 23 PHP
PHP面向对象五大原则之依赖倒置原则(DIP)详解
Apr 08 PHP
php提取微信账单的有效信息
Oct 01 PHP
PHP判断访客是否手机端(移动端浏览器)访问的方法总结【4种方法】
Mar 27 #PHP
PHP实现数据四舍五入的方法小结【4种方法】
Mar 27 #PHP
PHP判断是否微信访问的方法示例
Mar 27 #PHP
PHP中localeconv()函数的用法
Mar 26 #PHP
PHP实现的支付宝支付功能示例
Mar 26 #PHP
PHP小程序支付功能完整版【基于thinkPHP】
Mar 26 #PHP
PHP实现微信退款的方法示例
Mar 26 #PHP
You might like
PHP XML数据解析代码
2010/05/26 PHP
ThinkPHP简单使用memcache缓存的方法
2016/11/15 PHP
PHP的PDO预处理语句与存储过程
2019/01/27 PHP
php解析非标准json、非规范json的方式实例
2020/12/10 PHP
纯CSS打造的导航菜单(附jquery版)
2010/08/07 Javascript
远离JS灾难css灾难之 js私有函数和css选择器作为容器
2011/12/11 Javascript
js前台判断开始时间是否小于结束时间
2012/02/23 Javascript
document.addEventListener使用介绍
2014/03/07 Javascript
jquery如何把数组变为字符串传到服务端并处理
2014/04/30 Javascript
AngularJS路由Ui-router模块用法示例
2017/05/29 Javascript
zTree异步加载展开第一级节点的实现方法
2017/09/05 Javascript
利用adb shell和node.js实现抖音自动抢红包功能(推荐)
2018/02/22 Javascript
快速解决vue-cli不能初始化webpack模板的问题
2018/03/20 Javascript
React如何避免重渲染
2018/04/10 Javascript
使用elementUI实现将图片上传到本地的示例
2018/09/04 Javascript
vue cli 3.x 项目部署到 github pages的方法
2019/04/17 Javascript
VueCli3.0中集成MockApi的方法示例
2019/07/05 Javascript
基于javascript实现贪吃蛇经典小游戏
2020/04/10 Javascript
[47:02]2018DOTA2亚洲邀请赛3月29日 小组赛B组 VP VS paiN
2018/03/30 DOTA
Python开发虚拟环境使用virtualenvwrapper的搭建步骤教程图解
2018/09/19 Python
对python的unittest架构公共参数token提取方法详解
2018/12/17 Python
Python 中判断列表是否为空的方法
2019/11/24 Python
Django使用rest_framework写出API
2020/05/21 Python
使用canvas压缩图片上传的方法示例
2020/02/07 HTML / CSS
英国名牌男装店:Standout
2021/02/17 全球购物
会计与审计专业大专生求职信
2013/10/03 职场文书
2014年大学庆元旦迎新年活动方案
2014/03/09 职场文书
甜品店创业计划书
2014/08/14 职场文书
酒店仓管员岗位职责
2015/04/01 职场文书
体检通知范文
2015/04/21 职场文书
大学生团支书竞选稿
2015/11/21 职场文书
教师理论学习心得体会
2016/01/21 职场文书
员工安全责任协议书
2016/03/22 职场文书
php将xml转化对象的实例详解
2021/11/17 PHP
详解Redis的三种常用的缓存读写策略步骤
2022/05/06 Redis
VMware虚拟机安装 Windows Server 2022的详细图文教程
2022/09/23 Servers