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+xslt在windows平台上
Oct 09 PHP
针对初学PHP者的疑难问答(1)
Oct 09 PHP
PHP EOT定界符的使用详解
Sep 30 PHP
php 图像函数大举例(非原创)
Jun 20 PHP
在Windows下编译适用于PHP 5.2.12及5.2.13的eAccelerator.dll(附下载)
May 04 PHP
解析yii数据库的增删查改
Jun 20 PHP
PHP 线程安全与非线程安全版本的区别深入解析
Aug 06 PHP
php读取纯真ip数据库使用示例
Jan 26 PHP
php中实现记住密码下次自动登录的例子
Nov 06 PHP
PHP中防止SQL注入方法详解
Dec 25 PHP
PHP实现根据数组的值进行分组的方法
Apr 20 PHP
Laravel向公共模板赋值方法总结
Jun 25 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编辑器PhpStrom运行缓慢问题
2017/02/21 PHP
Laravel中encrypt和decrypt的实现方法
2017/09/24 PHP
关于Laravel参数验证的一些疑与惑
2019/11/19 PHP
ExtJS 2.0 GridPanel基本表格简明教程
2010/05/25 Javascript
JS中的public和private对象,即static修饰符
2012/01/18 Javascript
jQuery中(function(){})()执行顺序的理解
2013/03/05 Javascript
JS自定义功能函数实现动态添加网址参数修改网址参数值
2013/08/02 Javascript
jQuery教程 $()包装函数来实现数组元素分页效果
2013/08/13 Javascript
jQuery中removeData()方法用法实例
2014/12/27 Javascript
深入理解JavaScript系列(39):设计模式之适配器模式详解
2015/03/04 Javascript
JS扩展方法实例分析
2015/04/15 Javascript
使用JavaScript和CSS实现文本隔行换色的方法
2015/11/04 Javascript
AngularJS Ajax详解及示例代码
2016/08/17 Javascript
浅谈Angular.js中使用$watch监听模型变化
2017/01/10 Javascript
JS控件bootstrap datepicker使用方法详解
2017/03/25 Javascript
vue.js使用代理和使用Nginx来解决跨域的问题
2018/02/03 Javascript
Javascript 编码约定(编码规范)
2018/03/11 Javascript
JavaScript基础之静态方法和实例方法分析
2018/12/26 Javascript
浅谈发布订阅模式与观察者模式
2019/04/09 Javascript
利用python画出折线图
2018/07/26 Python
解决Pycharm界面的子窗口不见了的问题
2019/01/17 Python
Python中最大递归深度值的探讨
2019/03/05 Python
python文本数据处理学习笔记详解
2019/06/17 Python
Python使用mongodb保存爬取豆瓣电影的数据过程解析
2019/08/14 Python
docker-py 用Python调用Docker接口的方法
2019/08/30 Python
简单了解python中的f.b.u.r函数
2019/11/02 Python
python让函数不返回结果的方法
2020/06/22 Python
Python监听键盘和鼠标事件的示例代码
2020/11/18 Python
python subprocess pipe 实时输出日志的操作
2020/12/05 Python
css3进阶之less实现星空动画的示例代码
2019/09/10 HTML / CSS
HTML5中的postMessage API基本使用教程
2016/05/20 HTML / CSS
英国剑桥包官网:The Cambridge Satchel Company
2016/08/01 全球购物
运动会解说词50字
2014/01/18 职场文书
初中英语演讲稿
2014/04/29 职场文书
三八妇女节致辞
2015/07/31 职场文书
Python机器学习之逻辑回归
2021/05/11 Python