验证码的生成和验证

Thinkphp框架中自带验证码的生成和验证功能 Verify.class.PHP ,在ThinkPHP/Library/Think目录下面

简单使用,在控制器中

public function verify(){  
    $Verify = new \Think\Verify();  
    $Verify->fontSize = 18;  // 验证码字体大小(像素)
    $Verify->length   = 4;   // 验证码位数
    $Verify->useNoise = false;  //是否添加杂点 默认为true
    $Verify->codeSet = '0123456789';  // 验证码字符集合
    $Verify->imageW = 130;  // 验证码宽度 设置为0为自动计算
    $Verify->imageH = 50;   // 验证码高度 设置为0为自动计算
    $Verify->entry();  
}

在前台代码中

<div id="reg">
	<h2>会员登录</h2>
	<form method="post" action="http://testphp.com/home/users/entry">
		<div>
			<br />
			<div>用  户 名:<input type="text" name="username" class="text" /></div>
			<br />
			<div>密  码:<input type="password" name="password" class="text" /></div>
			<br />
			<div>验  证  码:<input name="verify" width="50%" height="50" class="captcha-text"  type="text" /></div>
			<br />                
			<div><img width="20%" class="left15" height="30" alt="验证码" src="__APP__/home/users/verify" title="点击刷新" οnclick="this.src='__APP__/home/users/verify?'+Math.random()" /></div>  <!-- Math.random()可以产生随机数,可以有效的进行验证码刷新 -->
			<br />
			<div><input type="submit" class="submit" value="登录" />      <a href="http://testphp.com/home/users/reg">免费注册</a></div>
		</div>
	</form>
</div>


即可实现一个简单数字验证码的生成与验证,效果如下图:



详细信息

最简单的方式生成验证码:

$Verify = new \Think\Verify();
$Verify->entry();

上面的代码会生成默认的验证码图片并输出,显示如下:


生成的验证码信息会保存到session中,包含的数据有:

array(
	'verify_code'=>'当前验证码的值',
	'verify_time'=>'验证码生成的时间戳'
)
如果需要在一个页面中生成多个验证码的话,entry方法需要传入可标识的信息,例如:

验证码1

// 验证码1
$Verify = new \Think\Verify();
$Verify->entry(1);
验证码2

// 验证码2
$Verify = new \Think\Verify();
$Verify->entry(2);

验证码参数

可以对生成的验证码设置相关的参数,以达到不同的显示效果。 这些参数包括:

参数描述
expire验证码的有效期(秒)
useImgBg是否使用背景图片 默认为false
fontSize验证码字体大小(像素) 默认为25
useCurve是否使用混淆曲线 默认为true
useNoise是否添加杂点 默认为true
imageW验证码宽度 设置为0为自动计算
imageH验证码高度 设置为0为自动计算
length验证码位数
fontttf指定验证码字体 默认为随机获取
useZh是否使用中文验证码
bg验证码背景颜色 rgb数组设置,例如 array(243, 251, 254)
seKey验证码的加密密钥
codeSet验证码字符集合 3.2.1 新增
zhSet验证码字符集合(中文) 3.2.1 新增















参数设置使用两种方式

实例化传入参数:

Public function verify(){
    $config =    array(
   		'fontSize'    =>    30,    // 验证码字体大小
		'length'      =>   3,     // 验证码位数
   		'useNoise'    =>    false, // 关闭验证码杂点
   );
    $verify = new \Think\Verify($config);
    $verify->entry();
}

动态设置的方式:

$Verify = new \Think\Verify();
$Verify->fontSize = 30;
$Verify->length = 3;
$Verify->useNoise = false;
$Verify->entry();

生成的验证码如图所示:


验证码字体

默认情况下,验证码的字体是随机使用 ThinkPHP/Library/Think/Verify/ttfs/目录下面的字体文件,我们可以指定验证码的字体,例如:

$Verify = new \Think\Verify();
// 验证码字体使用 ThinkPHP/Library/Think/Verify/ttfs/5.ttf
$Verify->fontttf = '5.ttf';
$Verify->entry();


背景图片

支持验证码背景图片功能:

$Verify = new \Think\Verify();
// 开启验证码背景图片功能 随机使用 ThinkPHP/Library/Think/Verify/bgs 目录下面的图片
$Verify->useImgBg = true;
$Verify->entry();
效果如图所示:


中文验证码

$Verify = new \Think\Verify();
// 验证码字体使用 ThinkPHP/Library/Think/Verify/ttfs/5.ttf
$Verify->useZh = true;
$Verify->entry();
效果如图所示:



如果无法正常显示,需要确认 ThinkPHP/Library/Think/Verify/zhttfs/ 目录下面存在中文字体文件。


指定验证码字符

通过重新设置codeSet参数:

$Verify = new \Think\Verify();
// 设置验证码字符为纯数字
$Verify->codeSet = '0123456789';
$Verify->entry();


如果是中文验证码,可以使用zhSet参数设置:

$Verify = new \Think\Verify();
$Verify->useZh = true;
// 设置验证码字符
$Verify->zhSet = '们以我到他会作时要动国产的一是工就年阶义发成部民可出能方进在了不和有大这';
$Verify->entry();

验证码检测

可以用Think\Verify类的check方法检测验证码的输入是否正确:

// 检测输入的验证码是否正确,$code为用户输入的验证码字符串
function check_verify($code, $id = ''){
	$verify = new \Think\Verify();
	return $verify->check($code, $id);
}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是 Python 中生成验证验证码的代码示例: ```python import random import string from PIL import Image, ImageDraw, ImageFont # 生成随机的验证码字符串 def generate_code(length=4): chars = string.ascii_letters + string.digits # 字符集 code = ''.join(random.choices(chars, k=length)) # 随机生成验证码 return code # 生成验证码图片 def generate_image(code, size=(120, 50)): image = Image.new('RGB', size, (255, 255, 255)) # 创建图片对象 font = ImageFont.truetype('arial.ttf', 36) # 字体对象 draw = ImageDraw.Draw(image) # 图片绘制对象 # 绘制验证码字符串 for i, c in enumerate(code): x = 20 + i * 30 y = 10 draw.text((x, y), c, font=font, fill=(0, 0, 0)) # 绘制干扰线 for i in range(10): x1 = random.randint(0, size[0]) y1 = random.randint(0, size[1]) x2 = random.randint(0, size[0]) y2 = random.randint(0, size[1]) draw.line((x1, y1, x2, y2), fill=(0, 0, 0)) # 绘制干扰点 for i in range(100): x = random.randint(0, size[0]) y = random.randint(0, size[1]) draw.point((x, y), fill=(0, 0, 0)) return image # 验证验证码 def check_code(code, input_code): return code.lower() == input_code.lower() # 示例代码 if __name__ == '__main__': code = generate_code() # 生成验证码字符串 image = generate_image(code) # 生成验证码图片 image.show() # 显示验证码图片 input_code = input('请输入验证码:') # 用户输入验证码 if check_code(code, input_code): # 验证验证码 print('验证码正确') else: print('验证码错误') ``` 这段代码首先生成一个随机的验证码字符串,然后使用 PIL 库生成一个验证码图片。验证码图片包括验证码字符串、干扰线和干扰点。用户输入验证码后,使用 check_code() 函数验证是否正确。最后,可以根据验证结果给出相应的提示。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值