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 面向对象 final类与final方法
May 05 PHP
使用PHP实现二分查找算法代码分享
Jun 24 PHP
jQuery EasyUI API 中文文档 - DateBox日期框
Oct 15 PHP
深入php define()函数以及defined()函数的用法详解
Jun 05 PHP
php自动加载机制的深入分析
Jun 08 PHP
php实现查询百度google收录情况(示例代码)
Aug 02 PHP
php中过滤非法字符的具体实现
Oct 29 PHP
XAMPP安装与使用方法详细解析
Nov 27 PHP
PHP四种基本排序算法示例
Apr 09 PHP
PHP实现批量检测网站是否能够正常打开的方法
Aug 23 PHP
php文件上传、下载和删除示例
Aug 28 PHP
php使用curl实现ftp文件下载功能
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判断一个字符串是否是回文字符串的方法
2015/03/23 PHP
PHP使用trim函数去除字符串左右空格及特殊字符实例
2016/01/07 PHP
php  PATH_SEPARATOR判断当前服务器系统类型实例
2016/10/28 PHP
PHP学习笔记之session
2018/05/06 PHP
一个基于jquery的文本框记数器
2012/09/19 Javascript
JS实现简单的Canvas画图实例
2013/07/04 Javascript
浅析JavaScript中两种类型的全局对象/函数
2013/12/05 Javascript
Bootstrap实现响应式导航栏效果
2015/12/28 Javascript
zepto与jquery的区别及zepto的不同使用8条小结
2016/07/28 Javascript
JS实现禁止鼠标右键的功能
2016/10/15 Javascript
简单理解js的prototype属性及使用
2016/12/07 Javascript
JavaScript 过滤关键字
2017/03/20 Javascript
Vue项目全局配置微信分享思路详解
2018/05/04 Javascript
JS实现图片上传多次上传同一张不生效的处理方法
2018/08/06 Javascript
详解vue项目接入微信JSSDK的坑
2018/12/14 Javascript
11个教程中不常被提及的JavaScript小技巧(推荐)
2019/04/17 Javascript
解析JS在获取当前月的最后一天遇到的坑
2019/08/30 Javascript
使用Python中的tkinter模块作图的方法
2017/02/07 Python
详解python实现识别手写MNIST数字集的程序
2018/08/03 Python
在Pandas中给多层索引降级的方法
2018/11/16 Python
python退出命令是什么?详解python退出方法
2018/12/10 Python
Python 切分数组实例解析
2019/11/07 Python
Python3直接爬取图片URL并保存示例
2019/12/18 Python
Python基于traceback模块获取异常信息
2020/07/23 Python
一款纯css3实现的漂亮的404页面的实例教程
2014/11/27 HTML / CSS
关于HTML5 Placeholder新标签低版本浏览器下不兼容的问题分析及解决办法
2016/01/27 HTML / CSS
柯基袜:Corgi Socks
2017/01/26 全球购物
Charlotte Tilbury英国官网:英国彩妆品牌
2017/05/26 全球购物
台湾生鲜宅配:大口市集
2017/10/14 全球购物
爱普生美国官网:Epson美国
2018/11/05 全球购物
护理专业大学生自我推荐信
2014/01/25 职场文书
专项法律服务方案
2014/06/11 职场文书
公司授权委托书范文
2014/09/21 职场文书
工作简历自我评价
2015/03/11 职场文书
Opencv实现二维直方图的计算及绘制
2021/07/21 Python
Ajax实现三级联动效果
2021/10/05 Javascript