captcha.php(PHP产生验证码并储存Session):

<?php

//开启Session
session_start(); //绘制底图
$image = imagecreatetruecolor(100, 30);//返回资源型的值
$bgcolor = imagecolorallocate($image, 255, 255, 255);//创建一个底图
imagefill($image, 0, 0, $bgcolor);//区域填充 /*
//输出随机数字
for($i = 0; $i < 4; $i++){
$fontsize = 6;//字体大小
$fontcolor = imagecolorallocate($image, rand(0, 120), rand(0, 120), rand(0, 120));//字体颜色
$fontcontent = rand(0, 9);//字符串内容 $x = ($i*100/4) + rand(5, 10);//数字的横坐标
$y = rand(5, 10);//数字的纵坐标 imagestring($image, $fontsize, $x, $y, $fontcontent, $fontcolor);//在图像资源上绘制字符
}
*/ //产生随机字符串
$captch_code = '';
for($i = 0; $i < 4; $i++){
$fontsize = 6;//字体大小
$fontcolor = imagecolorallocate($image, rand(0, 120), rand(0, 120),rand(0, 120));//字体颜色 $data = '23456789ABCDEFGHJKLMNOPQRTUVWXYZabcdefghjkmnopqrtuvwxy';//随机字符串的字典
$fontcontent = substr($data, rand(0, strlen($data)), 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, 99), $pointcolor);
} //线干扰
for($i = 0; $i < 6; $i++){
$linecolor = imagecolorallocate($image, rand(80, 220), rand(80, 220), rand(80, 220));
imageline($image, rand(1, 99), rand(1, 99), rand(1, 99), rand(1, 99), $linecolor);
} //输出图片内容
header('content-type:image/png');//输出内容的格式
imagepng($image);//输出内容
imagedestroy($image);//销毁资源 ?>

  

  

captcha-form.html(Web表单验证):

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>验证码</title>
</head> <body>
<form method="post" action="./captcha-result.php"> <p>
验证码图片:
<img id="captcha-img" border="1" src="./captcha.php?r=0">
<a href="javascript:void(0);" onclick="getCaptchaImg();">看不清</a>
</p> <p>请输入图片中的内容:<input id="authcode" type="text" name="authcode" value=""></p> <p><input type="submit" value="提交" style="padding:6px 20px;"></p> </form> <script>
//动态获取验证码
function getCaptchaImg(){
//从服务器获取新的验证码
document.getElementById('captcha-img').src='./captcha.php?r='+Math.random();
//清空文本框里已输入的内容
document.getElementById('authcode').value="";
}
</script> </body>
</html>

  

生成的验证码:  

captcha-result.php(PHP判断验证码是否正确):

<?php

//验证验证码是否正确
if(isset($_REQUEST['authcode'])){
//开启Session
session_start(); //strtolower()将字符串都转换成小写,将验证码设置为不区分大小写型
if(strtolower($_REQUEST['authcode']) == strtolower($_SESSION['authcode'])){
echo "输入正确";
}else{
echo "输入错误";
}
exit();
} ?>
  

  

所用到的函数原型:

<?php

//imagecreatetruecolor() 返回一个图像标识符,代表了一幅大小为 x_size 和 y_size 的黑色图像。
resource imagecreatetruecolor ( int $width , int $height ); //imagecolorallocate() 返回一个标识符,代表了由给定的 RGB 成分组成的颜色。red,green 和 blue 分别是所需要的颜色的红,绿,蓝成分。
int imagecolorallocate ( resource $image , int $red , int $green , int $blue ); //imagefill() 在 image 图像的坐标 x,y(图像左上角为 0, 0)处用 color 颜色执行区域填充(即与 x, y 点颜色相同且相邻的点都会被填充)。
bool imagefill ( resource $image , int $x , int $y , int $color ); //imagestring() 用 col 颜色将字符串 s 画到 image 所代表的图像的 x,y 坐标处(这是字符串左上角坐标,整幅图像的左上角为 0,0)。如果 font 是 1,2,3,4 或 5,则使用内置字体。
bool imagestring ( resource $image , int $font , int $x , int $y , string $s , int $col ); //imagesetpixel() 在 image 图像中用 color 颜色在 x,y 坐标(图像左上角为 0,0)上画一个点。
bool imagesetpixel ( resource $image , int $x , int $y , int $color ); //imageline() 用 color 颜色在图像 image 中从坐标 x1,y1 到 x2,y2(图像左上角为 0, 0)画一条线段。
bool imageline ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $color ); //imagepng() 将 GD 图像流(image)以 PNG 格式输出到标准输出(通常为浏览器),或者如果用 filename 给出了文件名则将其输出到该文件。
bool imagepng ( resource $image [, string $filename ] ); //imagedestroy() 释放与 image 关联的内存。image 是由图像创建函数返回的图像标识符,例如 imagecreatetruecolor()。
bool imagedestroy ( resource $image ); ?>

  

  

本文链接:https://www.cnblogs.com/connect/p/php-captcha-image.html

PHP实现验证码制作的更多相关文章

  1. webform 图片验证码制作

    界面:1 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.as ...

  2. MVC-简单验证码制作

    1.制作验证码: using System; using System.Collections.Generic; using System.Drawing; using System.Drawing. ...

  3. webform:图片水印、验证码制作

    一.图片水印 1:引命名空间System.Drawing; 前端代码 <div> <asp:FileUpload ID="FileUpload1" runat=& ...

  4. Java实现验证码制作之一Kaptcha验证码

    Kaptcha验证码 是google提供的验证码插件,使用起来相对简单,设置的干扰线以及字体扭曲不易让其他人读取破解. 这里我们需要 导入一个 kaptcha-2.3.jar  下载地址:http:/ ...

  5. Java实现验证码制作之一自己动手

    以前弄验证码都是现找现用,下面是自己跟着敲代码弄好的,记录一下,分享给大家. 我这里用的是Servlet ,Servlet代码如下 import java.awt.Color;import java. ...

  6. php验证码制作

    目标: 使用php生成验证码 成品: 逻辑代码: authcode.php <?php header("Content-type:image/png"); session_s ...

  7. PHP - 验证码制作加验证

    一,主页 index.php   <!DOCTYPE html> <html lang="en"> <head> <meta charse ...

  8. PHP绘图案例讲解验证码制作

    <?php header("Content-type: image/png");//声明浏览器解析为图片 $width=200; $height=100; $color1=i ...

  9. Code笔记 之:注册页面验证码

    文章内容包括: 1.验证码制作 -- 中文|字母|数字|…… 2.图文验证码 -- 图片防盗链(PHP而非JS) 3.JS防止右键点击图片 4.input表单输入框不记录输入过的信息 5.CSS+di ...

随机推荐

  1. 【已解决】gradle project refresh failed:connection refused

    git上clone一个Gradle项目,使用AS的gradle sync报错如下: Error:Connection refused (Connection refused) 原因:本地gradle版 ...

  2. Xamarin入门,开发一个简单的练手APP

    之前周末用Xamarin练手做了个简单APP,没有啥逻辑基本就是个界面架子,MVVM的简单使用,还有Binding,Command的简单使用,还有一个稍微复杂点两个界面交互处理(子页面新增后关闭,父页 ...

  3. kvm企业级虚拟化环境部署

    由于要做毕设了,不得不要搭建Linux环境,自己做的课题是ELK日志分析相关.因此要大干一场,一下子计划采用近10台机器来做试验,但由于我这里只有三台物理机,所以我就搞起了虚拟化kvm.在Linux里 ...

  4. Orcale日期函数to_date(),to_char()

    日期转换的两个函数分别是to_date()和to_char(),to_date() 作用将字符类型按一定格式转化为日期类型, to_char() 将日期转按一定格式换成字符类型 其中当时间需要精确的时 ...

  5. vue 去除前后空格trim

    一.使用trim修饰符 <input v-model.trim = "massage" > 二.使用filter过去属性 html: <ul id="l ...

  6. vue_模板渲染

    渲染 当获取到后端数据后,我们会把它按照一定的规则加载到写好的模板中,输出成在浏览器中显示的HTML,这个过程就称之为渲染. vue.js是在前端(即浏览器内)进行的模板渲染. 前后端渲染对比 前端渲 ...

  7. 通过SQL直接插入、修改ArcGIS SDE空间表中的数据

    基于Arcgis Server 10.1 +Oracle 11g环境测试 ArcGIS SDE ? 1 2 INSERT INTO CAMERA_INFO(OBJECTID,ID,SHAPE)     ...

  8. C#异步编程のWPF Invoke和BeginInvoke

    我们先看个简单的例子: private void Window_Loaded(object sender, RoutedEventArgs e) { Console.WriteLine("B ...

  9. POJ1419 Graph Coloring

    嘟嘟嘟 求无向图的最大独立集. 有这么一回事:最大独立集=补图的最大团. 所谓的最大团,就是一个子图,满足图中任意两点都有边. 然后ssy巨佬告诉了我一个很没有道理强的做法:随机. 每一次random ...

  10. Spring AOP失效之谜

    每天学习一点点 编程PDF电子书免费下载: http://www.shitanlife.com/code 什么是AOP1 AOP(Aspect Oriented Programming),即面向切面编 ...