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 相关文章推荐
输出控制类
Oct 09 PHP
Zend framework处理一个http请求的流程分析
Feb 08 PHP
实现PHP多线程异步请求的3种方法
Jan 17 PHP
php无限极分类递归排序实现方法
Nov 11 PHP
php curl 上传文件代码实例
Apr 27 PHP
实现PHP框架系列文章(6)mysql数据库方法
Mar 04 PHP
详解WordPress中用于更新和获取用户选项数据的PHP函数
Mar 08 PHP
Yii实现简单分页的方法
Apr 29 PHP
Laravel 5.5 的自定义验证对象/类示例代码详解
Aug 29 PHP
php图片合成方法(多张图片合成一张)
Nov 25 PHP
PHP设计模式之状态模式定义与用法详解
Apr 02 PHP
PHP将英文数字转换为阿拉伯数字实例讲解
Jan 28 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实现框架(二)
2006/10/09 PHP
通过PHP修改Linux或Unix口令的方法分享
2012/01/30 PHP
关于shopex同步ucenter的redirect问题,导致script不运行
2013/04/10 PHP
php 删除一维数组中某一个值元素的操作方法
2018/02/01 PHP
ThinkPHP5.0框架验证码功能实现方法【基于第三方扩展包】
2019/03/11 PHP
CentOS7编译安装php7.1的教程详解
2019/04/18 PHP
javascript 写类方式之三
2009/07/05 Javascript
一个cssQuery对象 javascript脚本实现代码
2009/07/21 Javascript
Extjs学习笔记之五 一个小细节renderTo和applyTo的区别
2010/01/07 Javascript
Pro JavaScript Techniques学习笔记
2010/12/28 Javascript
javascript 手动给表增加数据的小例子
2013/07/10 Javascript
JS、CSS加载中的小问题探讨
2013/11/26 Javascript
jquery实现键盘左右翻页特效
2015/04/30 Javascript
JS异步加载的三种实现方式
2017/03/16 Javascript
Angular中$broadcast和$emit的使用方法详解
2017/05/22 Javascript
Nuxt.js开启SSR渲染的教程详解
2018/11/30 Javascript
微信小程序实现上传多张图片、删除图片
2020/07/29 Javascript
python 遍历字符串(含汉字)实例详解
2017/04/04 Python
对Python3中bytes和HexStr之间的转换详解
2018/12/04 Python
python模糊图片过滤的方法
2018/12/14 Python
基于PyQt4和PySide实现输入对话框效果
2019/02/27 Python
Python 多线程搜索txt文件的内容,并写入搜到的内容(Lock)方法
2019/08/23 Python
python [:3] 实现提取数组中的数
2019/11/27 Python
html5 Canvas画图教程(8)—canvas里画曲线之bezierCurveTo方法
2013/01/09 HTML / CSS
Html5跳转到APP指定页面的实现
2020/01/14 HTML / CSS
阿联酋优惠券服务:Living Kool
2019/12/12 全球购物
广州品高软件.net笔面试题目
2012/04/18 面试题
Python文件操作的面试题
2013/06/22 面试题
大学生自我鉴定
2013/12/16 职场文书
应届本科生推荐信范文
2013/12/25 职场文书
总结表彰大会主持词
2014/03/26 职场文书
巴西世界杯32强口号
2014/06/05 职场文书
社区文艺活动方案
2014/08/19 职场文书
社区活动总结范文
2015/05/07 职场文书
宣传委员竞选稿
2015/11/19 职场文书
SQL模糊查询报:ORA-00909:参数个数无效问题的解决
2021/06/21 Oracle