PHP图片验证码功能简单开发

  验证码是网站开发中常用的功能,可以保证用户提交数据和服务器的安全,验证码的形态也是千奇百怪,从传统的数字+字母,到拼图,再到找元素等等越来越复杂。

  今天说一下用PHP原生开发方式如何写一个最常见的数字+字母图片验证码功能,过程非常简单。

  首先创建验证码生成文件verify.php

<?php
// 开启session
session_start();
// 创建图片资源,宽高
$img = imagecreatetruecolor(70,30);
// 创建蓝色
$blue = imagecolorallocate($img,0,0,255);
// 创建灰色
$gray = imagecolorallocate($img,200,200,200);
// 用灰色填充图片背景色
imagefill($img,0,0,$gray);
// 合并随机生成0-9,a-z,A-Z的数组
$arr = array_merge(range(0,9),range('a','z'),range('A','Z'));
// 随机打乱数组
shuffle($arr);
// 连接数组,取出前4位
$randStr = join('',array_slice($arr,0,4));
// 把验证码存入session
$vcode = $_SESSION['vcode'] = $randStr;
// 用蓝色字体显示,设置字体文件,生成验证码
imagettftext($img,15,0,0,20,$blue,'C:\Windows\Fonts\Arial.ttf',$randStr);
// 设置文件编码
header('content-type:image/jpeg');
// 输出jpg格式图片
imagejpeg($img);
// 释放资源
imagedestroy($img);

  写一个简单的表单页面index.html用来用户提交数据在img标签中引入前面的verify.php文件,增加onclick属性用来每次点击刷新不同的验证码。

<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<form action="check.php" method="post">
		<p>用户名:<input type="text" name="username"></p>
		<p>密&nbsp;&nbsp;&nbsp;码:<input type="password" name="password"></p>
		<p>验证码:<input type="text" name="fcode">&nbsp;<img src="verify.php" onclick="this.src='verify.php?rand='+Math.random()" alt=""></p>
		<p><input type="submit" value="注册"></p>
	</form>
</body>
</html>

页面效果如图

  最后再写一个用来验证提交数据的页面check.php

<?php
// 开启session
session_start();
// 获取表单传来用户输入的验证码,并转换为小写
$fcode = strtolower($_POST['fcode']);
// 获取session中保存的生成验证码
$vcode = strtolower($_SESSION['vcode']);
// 对比两个验证码是否一致
if($fcode == $vcode){
	echo "用户 {$_POST['username']} 注册成功!";
}else{
	echo '验证码错误!';
}

本站原创内容,如需转载请注明来源:https://www.liutonghui.com/67.html

上一篇 2014-07-31
下一篇 2014-08-09

评论列表(0条)

  • 暂时没有评论!

发表评论

captcha

相关推荐

  • 再谈PHP错误与异常处理

      请一定要注意,没有特殊说明:本例 PHP Version &lt; 7   说起PHP异常处理,大家首先会想到try-catch,那好,我们先看一段程序吧:有一个test.php文件,有一段简单的PHP程序,内容如下,然后命令行执行:php test.php &lt;?php $num = 0; try { echo 1/$num; } catch (Exception $e){ ......

    2017-06-12
    13780
  • 一个经典的PHP加密解密算法

      项目中有时我们需要使用PHP将特定的信息进行加密,也就是通过加密算法生成一个加密字符串,这个加密后的字符串可以通过解密算法进行解密,便于程序对解密后的信息进行处理。   最常见的应用在用户登录以及一些API数据交换的场景。   最常见的应用在用户登录以及一些API数据交换的场景。   笔者收录了一些比较经典的PHP加密解密函数代码,分享给大家。加密解密原理一般都是通过一定的加密解密算法,将密钥加入到算法中,最终得到加密解密结果......

    2016-06-07
    10770
  • jQuery Ajax实现批量删除数据

      在 jQuery 中使用 Ajax 实现批量删除的基本思路如下:   在前端,使用 jQuery 监听&ldquo;批量删除&rdquo;按钮的点击事件,收集用户选择的要删除的项目的标识(例如,ID)。   使用 Ajax 发送异步请求到后端,将要删除的项目标识传递给服务器。   在后端,接收到请求后,根据接收到的项目标识进行删除操作,并返回相应的结果给前端。   以下是一个简单的示例代码:   HTML &lt;!DOCTYPE ......

    2015-06-15
    17040
  • HTML5中article元素与section元素有什么区别

      在HTML5中,为了使文档的结构更加清晰明确,追加了几个与页眉、页脚、内容区块等文档结构相关联的结构元素。内容区块是指将HTML页面按逻辑分割后的单位。例如对于书籍来说,章、节可以称为内容区块;对于博客网站来说,导航菜单、文章正文、文章的评论等每一个部分都可称为内容区块。   在HTML5中新增的主体结构元素中有两个元素分别article元素与section元素,这两个元素是什么意思?通常用于哪些内容区块?何时用article元素......

    2014-10-27
    18540
  • ThinkPHP5使用laypage分页插件实现列表分页功能

      在使用thinkPHP框架做项目的时候,经常会遇到对列表的内容进行分页。thinkPHP框架中自带了分页功能,但是有缺陷。这个缺陷是每次返回每页数据给页面时需要重新加载页面所需要的JS、CSS等资源。如果页面包含的JS过多、过大,会增加流量压力。因此,我们使用laypage插件。每次使用ajax请求获取每页的数据就可以了,不需要重复加载页面。   分页流程   流程说明:   1) 调研App.php中的函数,该函数调用fetch函......

    2018-05-11
    20880
  • PHP类的自动加载机制实现方法

      PHP的自动加载机制允许你在需要时自动加载所需的类文件,而无需手动包含或引入每个文件。PHP提供了 spl_autoload_register() 函数来实现自动加载机制。   以下是实现PHP类自动加载机制的步骤: &lt;?php // 自定义的自动加载函数 function my_autoloader($class) { include 'classes/' . $class . '.class.php'; } //......

    2019-03-14
    19060
  • 吊炸天的 PHP 7 ,你值得拥有

      2015年的夏天,虽然来得不算火热,但是在互联网技术的夏天,比任何一年都更为火热。   刚刚才结束了 5 月底的网易、支付宝、携程以及多家云存储厂商的接连故障的坏消息,6月上旬则迎来了编程语言界两大好消息,第一件是 Swift 2.0 发布以及开源,另一件是PHP 7 alpha版正式发布。这两件大事,都是可以载入相应的编程语言的史册级的事件。   Swift 2.0 的事,咱先不说了,本文的重点是带着大家见识一下鸟哥等众位大神......

    2015-06-25
    20392
  • PHP实现APP微信支付的实例讲解

      一、PHP后台后台生成预支付交易单,返回正确的预支付交易回话标识后再在APP里面调起支付!   官方文档:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_1   根据文档拼接微信需要的参数,这里需要几个方法,直接上代码!   1.传输给微信的参数要组装成xml格式发送,传入参数数组! public function ToXml($data=array()) ......

    2018-08-31
    18680