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&amp;&amp;mysql)五
Oct 09 PHP
用PHP实现将GB编码转换为UTF8
Nov 25 PHP
简单的过滤字符串中的HTML标记
Dec 25 PHP
php数组函数序列之array_search()- 按元素值返回键名
Nov 04 PHP
PHP数组循环操作详细介绍 附实例代码
Feb 03 PHP
php 批量添加多行文本框textarea一行一个
Jun 03 PHP
PHP与MYSQL中UTF8编码的中文排序实例
Oct 21 PHP
php 5.6版本中编写一个PHP扩展的简单示例
Jan 20 PHP
PHP callback函数使用方法和注意事项
Jan 23 PHP
PHP使用递归生成文章树
Apr 21 PHP
php批量删除超链接的实现方法
Oct 19 PHP
Laravel中9个不经常用的小技巧汇总
Apr 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
JSON在PHP中的应用介绍
2012/09/08 PHP
php获取百度收录、百度热词及百度快照的方法
2015/04/02 PHP
Windows2003下php5.4安装配置教程(Apache2.4)
2016/06/30 PHP
PDO::exec讲解
2019/01/28 PHP
解决表单中第一个非隐藏的元素获得焦点的一个方案
2009/10/26 Javascript
vs2003 js文件编码问题的解决方法
2010/03/20 Javascript
js面向对象设计用{}好还是function(){}好(构造函数)
2011/10/23 Javascript
通过jquery还原含有rowspan、colspan的table的实现方法
2012/02/10 Javascript
JQuery拖拽元素改变大小尺寸实现代码
2012/12/10 Javascript
鼠标放在图片上显示大图的JS代码
2013/03/26 Javascript
js实现点击图片将图片地址复制到粘贴板的方法
2015/02/16 Javascript
JavaScript实现将文本框的值插入指定位置的方法
2015/08/13 Javascript
JavaScript的MVVM库Vue.js入门学习笔记
2016/05/03 Javascript
把多个JavaScript函数绑定到onload事件处理函数上的方法
2016/09/04 Javascript
Validform表单验证总结篇
2016/10/31 Javascript
EasyUI 中combotree 默认不能选择父节点的实现方法
2016/11/07 Javascript
Jquery实现跨域异步上传文件总结
2017/02/03 Javascript
jqGrid翻页时数据选中丢失问题的解决办法
2017/02/13 Javascript
JS与HTML结合实现流程进度展示条思路详解
2017/09/03 Javascript
解析vue中的$mount
2017/12/21 Javascript
js中this对象用法分析
2018/01/05 Javascript
Canvas实现微信红包照片效果
2018/08/21 Javascript
JavaScript实现左右滚动电影画布
2020/02/06 Javascript
基于js实现判断浏览器类型代码实例
2020/07/17 Javascript
python psutil库安装教程
2018/03/19 Python
Python3.5内置模块之os模块、sys模块、shutil模块用法实例分析
2019/04/27 Python
linux mint中搜狗输入法导致pycharm卡死的问题
2020/10/28 Python
linux centos 7.x 安装 python3.x 替换 python2.x的过程解析
2020/12/14 Python
一款纯css3实现简单的checkbox复选框和radio单选框
2014/11/05 HTML / CSS
美国波西米亚风格服装品牌:Show Me Your Mumu
2018/01/05 全球购物
军用级手机壳,专为冒险而建:Zizo Wireless
2019/08/07 全球购物
中学生获奖感言
2014/02/04 职场文书
理工学院学生自我鉴定
2014/02/23 职场文书
社会调查研究计划书
2014/05/01 职场文书
党章培训心得体会
2014/09/04 职场文书
入党介绍人意见怎么写
2015/06/03 职场文书