PHP 图像处理与SESSION制作超简单验证码的方法示例

 更新时间:2019年12月06日 11:43:31   作者:陈柴Rarin  
这篇文章主要介绍了PHP 图像处理与SESSION制作超简单验证码的方法,结合实例形式详细分析了PHP结合session绘制图形验证码相关操作技巧,需要的朋友可以参考下

本文实例讲述了PHP 图像处理与SESSION制作超简单验证码的方法。分享给大家供大家参考,具体如下:

验证码的实现

首先我们要清楚,无论是做什么东西,在做之前一定要有思路,譬如这个验证码里他有些什么,为了实现它我们该做些什么,怎么样去做。

这里我例举出几个点。

1.验证码肯定要有内容。
2.验证码里肯定要有干扰信息,就譬如,线条干扰和点点干扰。

那么为了实现他们我们该如何做呢?

第一步,创建一个名为captcha.php的文件

在里面输入

<?php
session_start();//开启会话
header("Content-type:image/png");//定义为图片
$im = imagecreatetruecolor(100,30);//创建一个画布的大小
$color = imagecolorallocate($im, 255, 255, 255);//填充背景颜色
imagefill($im,0,0,$color);//填充$color颜色于$im画板区域从左上角0,0开始
$content = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";//验证码内容
$fontsize = "6";//字体大小
$ragcha = "";//声明一个空变量,接受验证码内容并保存

这个时候,验证码的一些基本东西我们都完成了,定义了验证码的宽高,背景色验证码内容,验证码字体大小,和一个接受验证码的变量,就该做第二步了。

第二步,获取验证码内容

for ($i=0; $i < 4; $i++) { 
 //截取字符串
 $char = substr($content,rand(0,strlen($content)-1),1);
 //把得到的内容输入到ragcha里
 $ragcha = $ragcha.$char;
 //设置x轴与y轴的坐标
 $x = $i*(100/4) + rand(5,15);
 $y = rand(5,10);
 //设置验证码内容颜色
 $fontcolor = imagecolorallocate($im,rand(0,120),rand(0,120),rand(0,120));
 //输出
 imagestring($im, $fontsize, $x, $y, $char, $fontcolor);
}
//保证验证码内容不丢失
$_SESSION["ragcha"] = $ragcha;

在这里我们设置了$i的变量不能大于四,然后用他乘以(100/4),保证他的的值不会大过100,再加上rand函数里随机抽取5-15里的数值,使其的x轴坐标范围保证在(5-90)之间,y轴的坐标保证在(5-10)之间,使其大概率的保证了内容显示的范围居中

第三步,设置干扰因素

我们要明白,在验证码里有什么干扰因素,再想办法把它呈现出来。如下

//设置干扰因素
//1.画线条
for ($g=0; $g < 3; $g++) {
 //设置线条颜色
 $line = imagecolorallocate($im, rand(50,100), rand(50,100), rand(50,100));
 //输出线条
 imageline($im,rand(0,99),rand(0,19),rand(0,99),rand(0,19), $line);
}
//2.给背景加点点
for ($r=0; $r < 300; $r++) {
 //设置点点颜色
 $point = imagecolorallocate($im, rand(20,180), rand(20,180), rand(20,180));
 //输出点点
 imagesetpixel($im, rand(0,100), rand(0,30), $point);
}
imagepng($im);//输出整个图片

到这里,我们的验证码功能基本上已经实现的差不多了,内容获取到了,横线和点点等干扰因素也有了。如果需要添加到登录页面可自行发挥。

更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP图形与图片操作技巧汇总》、《PHP数组(Array)操作技巧大全》、《PHP数据结构与算法教程》、《php程序设计算法总结》、《PHP数学运算技巧总结》、《php字符串(string)用法总结》及《php常见数据库操作技巧汇总

希望本文所述对大家PHP程序设计有所帮助。

相关文章

  • PHPLog php 程序调试追踪工具

    PHPLog php 程序调试追踪工具

    本文将为你介绍一个调试工具,它可以替代echo,print_r,var_dump等系统函数,还具有调用栈及参数追踪功能. 简言之,它是debug_backtrace的web版本.
    2009-09-09
  • PHP+APACHE实现网址伪静态

    PHP+APACHE实现网址伪静态

    这篇文章主要介绍了PHP+APACHE通过使用mod rewrite模块实现网址伪静态的相关资料,需要的朋友可以参考下
    2015-02-02
  • PHP函数rtrim()使用中的怪异现象分析

    PHP函数rtrim()使用中的怪异现象分析

    这篇文章主要介绍了PHP函数rtrim()使用中的怪异现象,结合具体实例形式分析了php函数rtrim在进行字符匹配过程中出现的问题与解决方法,有助于进一步了解rtrim函数的原理与使用技巧,需要的朋友可以参考下
    2017-02-02
  • PHP实现登录搜狐广告获取广告联盟数据的方法【附demo源码】

    PHP实现登录搜狐广告获取广告联盟数据的方法【附demo源码】

    这篇文章主要介绍了PHP实现登录搜狐广告获取广告联盟数据的方法,涉及php基于curl的远程数据操作相关技巧,需要的朋友可以参考下
    2016-10-10
  • 浅谈php扩展imagick

    浅谈php扩展imagick

    imagick是一个可以供PHP调用ImageMagick功能的PHP扩展。使用这个扩展可以使PHP具备和ImageMagick相同的功能。
    2014-06-06
  • php中rename函数用法分析

    php中rename函数用法分析

    这篇文章主要介绍了php中rename()函数用法,较为详细的分析了rename()函数中参数的含义及具体的使用方法,具有一定的参考借鉴价值,需要的朋友可以参考下
    2014-11-11
  • PHP使用laravel邮件服务发送邮件

    PHP使用laravel邮件服务发送邮件

    laravel自带SwiftMailer库,集成了多种邮件API,可以很方便的实现邮件的发送。在本教程中使用到的是SMTP(Simple Message Transfer Protocol)简单邮件传输协议,通常理解为邮件发送服务器
    2023-03-03
  • PHP中is_file不能替代file_exists的理由

    PHP中is_file不能替代file_exists的理由

    首先要提出的问题是,is_file真的可以替代file_exists使用吗?答案是否定的。为什么?原因很简单,is_file有缓存
    2014-03-03
  • php使用MySQL保存session会话的方法

    php使用MySQL保存session会话的方法

    这篇文章主要介绍了php使用MySQL保存session会话的方法,实例分析了php操作MySQL数据库及session对话的相关技巧,需要的朋友可以参考下
    2015-06-06
  • PHP中unset,array_splice删除数组中元素的区别

    PHP中unset,array_splice删除数组中元素的区别

    php中删除数组元素是非常的简单的,但有时删除数组需要对索引进行一些排序要求我们会使用到相关的函数,这里我们来介绍使用unset,array_splice删除数组中的元素区别吧
    2014-07-07

最新评论