ThinkPHP 验证码详解及实例

ThinkPHP 验证码详解及实例

ThinkPHP 验证码

 

ThinkPHP 内置了验证码的支持,可以直接使用。要使用验证码,需要导入扩展类库中的 ORG.Util.Image 类库和 ORG.Util.String 类库。 

 

验证码方法

我们通过在在模块类中增加一个 verify 方法来用于显示验证码,最简单的例子: 

Publicfunctionverify(){

// 导入Image类库
import(“ORG.Util.Image”);
Image::buildImageVerify();
}

import 方法是 ThinkPHP 内置的类库和文件导入方法,上例导入的文件为 ThinkPHP 系统目录下 Lib/ORG/Util/Image.class.php 文件。如果已经将 Image 类库拷贝到了当前项目下,如 Lib/ORG 下,则可以以:

import(“@.ORG.Util.Image”);import 方法是 ThinkPHP 内置的类库和文件导入方法,上例导入的文件为 ThinkPHP 系统目录下 Lib/ORG/Util/Image.class.php 文件。

 

访问验证码

可以直接在浏览器里访问该验证码方法以确定验证码是否能正常显示: 

http://127.0.0.1/index.php/Public/verify 

如果一切正常,显示验证码如下所示: 

 

表单中使用验证码

在表单页面中使用验证码,是以html img 标签来调用: 

<inputtype=“text”name=“verify”>
<imgid=“verifyImg”src=“__URL__/verify”onClick=changeVerify()title=“点击刷新验证码”/>

src 属性值即为验证码方法访问地址,视实际情况不同而不同。 

 

验证码刷新

当点击验证码图片时,触发 JavaScript changeVerify() 函数重新读取验证码,从而实现验证码刷新。该函数参考如下: 

<scriptlanguage=“JavaScript”>
functionchangeVerify(){

vartimenow =newDate().getTime();
document.getElementById(‘verifyImg’).src=‘__URL__/verify/’+timenow;
}
</script>

 

验证码验证

在调用验证码 verify 的时候,buildImageVerify 会记录本次验证码的 MD5 信息。在表单验证操作里,以如下方法来检查验证码是否正确: 

if($_SESSION[‘verify’]!=md5($_POST[‘verify’])){

$this->error(‘验证码错误!’);
}

其中 $_SESSION[‘verify’] 中的 verify 名称为 buildImageVerify 方法默认 SESSION 注册名称,具体见 buildImageVerify 语法。 

 

=================================

 

使用其他风格验证码

buildImageVerify 方法生成验证码时,根据不同参数,可以生成不同风格的验证码。

buildImageVerify()

buildImageVerify 方法语法如下: 

buildImageVerify(length,mode,type,width,height,verifyName)

 

参数说明: 

length验证码字符个数,默认为 4 位。

mode验证码字符类型,默认为数字。

其他支持类型有:0字母 1数字 2大写字母 3小写字母 4中文 5混合(去掉了容易混淆的字符oOLl和数字01)。

type验证码的图片类型,默认为 png 。

width验证码图片的宽度,默认根据验证码长度自动计算。

height验证码图片的高度,默认为 22px 。

verifyName验证码的 SESSION 注册名称,默认为 verify 。

 

因此可以根据参数构造出其他风格的验证码,如: 

// 5位数字
Image::buildImageVerify(5);
// 5位大写字母
Image::buildImageVerify(5,2);
// 6位大小写字母与数字混合
Image::buildImageVerify(6,5);

 

中文验证码

buildImageVerify 方法不支持中文验证码的显示,要使用中文验证码,需要使用 GBVerify 方法。 

buildImageVerify()

buildImageVerify 方法语法如下: 

GBVerify(length,type,width,height,fontface,verifyName)

 

 

参数说明: 

length验证码字符个数,默认为 4 位。

type验证码的图片类型,默认为 png 。

width验证码图片的宽度,默认根据验证码长度自动计算。

height验证码图片的高度,默认为 50px 。

fontface使用的字体文件,使用包含路径的完整文件名或者将字体文件放到图像类(Image.class.php)同目录下,默认使用的字体文件是 simhei.ttf (存在于 windows 的 Fonts 目录下)。

verifyName验证码的 SESSION 注册名称,默认为 verify 。

例子: 

Publicfunctionverify(){

import(“ORG.Util.Image”);
Image::GBVerify();
}

 

 

如果数字英文的验证码能正常显示而不能显示中文验证码,那很可能是没有读取到正确的字体文件。将 simhei.ttf 文件拷贝至 Image.class.php 同目录(ThinkPHP目录/Lib/ORG/Util/)下即可。

ThinkPHP 验证码目前不支持大小写英文混合(无数字)以及中英文混合的验证码。 

 

 

应用实例:

HTML+JavaScript代码:

<script type=”text/javascript”>
functionchangeVerify(obj){

vartimenow =newDate().getTime();
obj.src =obj.src+’&time=’+timenow;
}
</script>

<table border=”0″ cellspacing=”0″ style=”text-align:left;”>
<tr>
<td style=”text-align:right;”>生成图片验证码:</td><td><img src=”__URL__/ImageVerify?type=1″onClick=”changeVerify(this)”title=”点击刷新验证码”/></td>
</tr>
<tr>
<td style=”text-align:right;”>中文验证码:</td><td><img src=”__URL__/ImageVerify?type=2″onClick=”changeVerify(this)”title=”点击刷新验证码”/></td>
</tr>
<tr>
<td style=”text-align:right;”>生成高级图像验证码:</td><td><img src=”__URL__/ImageVerify?type=3″onClick=”changeVerify(this)”title=”点击刷新验证码”/></td>
</tr>
<tr>
<td style=”text-align:right;”>生成UPC-A条形码:</td><td><img src=”__URL__/ImageVerify?type=4″onClick=”changeVerify(this)”title=”点击刷新验证码”/></td>
</tr>
<tr>
<td style=”text-align:right;”>根据给定的字符串生成图像:</td><td><img src=”__URL__/ImageVerify?type=5″onClick=”changeVerify(this)”title=”点击刷新验证码”/></td>
</tr>
</table>

PHP代码:

//验证码
functionImageVerify(){

import(“@.ORG.Util.Image”);
$type =isset($_GET[‘type’])?intval($_GET[‘type’]):1;

switch($type){

case1:
Image::buildImageVerify();//生成图片验证码
break;
case2:
Image::GBVerify();//中文验证码
break;
case3:
Image::showAdvVerify();//生成高级图像验证码
break;
case4:
$verify =self::GetRandChar(11);
Image::UPCA($verify);//生成UPC-A条形码
break;
case5:
$verify =self::GetRandChar();
Image::buildString($verify);//根据给定的字符串生成图像
break;
}
}

//生成指定长度的验证码
functionGetRandChar($length =4){

$str =’123456789abcdefghijklmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ’;
$result =”;
$l =strlen($str)-1;
$num=0;

for($i =0;$i <$length;$i ++){

$num =rand(0,$l);
$a=$str[$num];
$result =$result.$a;
}
return$result;
}

转载于:https://my.oschina.net/guomingliang/blog/265139

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/109827.html原文链接:https://javaforall.net

(0)
上一篇 2021年8月29日 下午5:00
下一篇 2021年8月29日 下午6:00


相关推荐

  • 手机写java_手机怎么写java

    手机写java_手机怎么写java手机怎么写java通常我们写java程序都是在电脑上,很少在手机上写程序,因为手机屏幕小,写起来不方便,而且ide也没有电脑的好用。但手机相对来说比较便捷,随时随地就可以写代码,练练手,下面就介绍一下如何在手机上写java程序吧。1、下载安装软件软件名:JavaN-IDE-AndroidBuilder-JavaSECompiler2、进入软件刚开始进入时,会提示你创建工程、包名、主方法类,…

    2022年7月9日
    21
  • 免杀工具下载_360免杀器

    免杀工具下载_360免杀器今天有一点想你,其实,不止一点,其实,不止今天。。。​—-网易云热评一、简介快速生成免杀exe可执行文件,目前拥有三种免杀的方法二、下载及安装1、下载到本地gitclonehttps://github.com/lengjibo/FourEye.git2、进入该文件夹cdFourEye3、安装需要的python库pipinstall-rrequirements.txt三、使用方法1、打开该软件python3Byp…

    2022年8月20日
    16
  • OpenClaw飞书群聊机器人@不响应问题排查与解决

    OpenClaw飞书群聊机器人@不响应问题排查与解决

    2026年3月14日
    1
  • mysql截取字符串并更新_mysql 截取字符串并 update select

    mysql截取字符串并更新_mysql 截取字符串并 update select亲测有效格式为update需要修改的表b1innerjoin(查询到的临时表)b2onb1.id=b2.idsetb1.要修改的字段=b2.查询到的值因为想要把表中的一个字段的一部分取出来,另放一个新的字段里面,所以想到了mysql的字符串截取功能。需要更新的数据:selectparams,substring_index(params,’=’,-1),paramI…

    2022年6月11日
    120
  • JQuery delegate的使用心得

    JQuery delegate的使用心得delegate 函数用于为指定元素的一个或多个事件绑定事件处理函数 事实上 绑定事件类似的方法同样还有 on 函数 那 delegate 有什么特殊的地方呢 语法首先来看下其语法 selector delegate childSelecto event data function 其中 data 是可选的 规定传递到函数的额外数据 demo 下面看个例子

    2026年3月26日
    1
  • HTML embed 标签「建议收藏」

    HTML embed 标签「建议收藏」HTMLembed标签embed标签–定义网页中嵌入除图片外的多媒体不符合标准网页设计的理念,不赞成使用.embed标签是单独出现的,以开始,结束使用embed标签可以在网页中嵌入Flash,Mid,MP3等嵌入式内容embed标签已经被符合标准的object标签代替。属性Common–一般属性align–对齐方式autostart–是否

    2025年8月25日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号