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中cookies使用指南
Mar 16 PHP
Ajax+PHP 边学边练之四 表单
Nov 27 PHP
PHP文件上传主要代码讲解
Sep 30 PHP
header导出Excel应用示例
Jan 24 PHP
php合并数组中相同元素的方法
Nov 13 PHP
PHP中if和or运行效率对比
Dec 12 PHP
微信支付PHP SDK之微信公众号支付代码详解
Dec 09 PHP
变量在 PHP7 内部的实现(二)
Dec 21 PHP
ThinkPHP中order()使用方法详解
Apr 19 PHP
PHP使用递归算法无限遍历数组示例
Jan 13 PHP
PHP生成短网址的思路以及实现方法的详解
Mar 25 PHP
java解析json方法总结
May 16 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 阴历-农历-转换类代码
2012/01/16 PHP
推荐十款免费 WordPress 插件
2015/03/24 PHP
phpinfo() 中 Local Value(局部变量)Master Value(主变量) 的区别
2016/02/03 PHP
Jquery的hide及toggle方法让超链接慢慢消失
2013/09/06 Javascript
sails框架的学习指南
2014/12/22 Javascript
JS+CSS实现的竖向简洁折叠菜单效果代码
2015/10/22 Javascript
基于Layer+jQuery的自定义弹框
2020/05/26 Javascript
使用Curl命令查看请求响应时间方法
2016/11/04 Javascript
详解Angularjs 如何自定义Img的ng-load 事件
2017/02/15 Javascript
vue.js,ajax渲染页面的实例
2018/02/11 Javascript
js实现简单的打印表格
2020/01/15 Javascript
javascript 原型与原型链的理解及应用实例分析
2020/02/10 Javascript
如何使用vue slot创建一个模态框的实例代码
2020/05/24 Javascript
node.js基础知识汇总
2020/08/25 Javascript
python爬虫常用的模块分析
2014/08/29 Python
python实现逆序输出一个数字的示例讲解
2018/06/25 Python
python 计算方位角实例(根据两点的坐标计算)
2020/01/17 Python
django 扩展user用户字段inlines方式
2020/03/30 Python
Python优秀开源项目Rich源码解析的流程分析
2020/07/06 Python
Python Map 函数的使用
2020/08/28 Python
美国现代家具网站:Design Within Reach
2018/07/19 全球购物
医院护士专业个人的求职信
2013/12/09 职场文书
音乐教学反思
2014/02/02 职场文书
迟到早退检讨书
2014/02/10 职场文书
《记承天寺夜游》教学反思
2014/02/16 职场文书
公司承诺书怎么写
2014/05/24 职场文书
化学专业自荐信
2014/05/28 职场文书
门面房租房协议书
2014/08/20 职场文书
教师四风对照检查材料思想汇报
2014/09/17 职场文书
培训讲师开场白
2015/06/01 职场文书
企业法人代表证明书
2015/06/18 职场文书
初中体育课教学反思
2016/02/16 职场文书
《半截蜡烛》教学反思
2016/02/19 职场文书
历史名人教你十五个读书方法,赶快Get起来!
2019/07/18 职场文书
python实现剪贴板的操作
2021/07/01 Python
CentOS MySql8 远程连接实战
2022/04/19 MySQL