一、在控制器中写方法,生成验证码,代码如下:
/** * 验证码生成 * 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_c(){ $Verify = new ThinkVerify(); $Verify->fontSize = 18; $Verify->length = 4; $Verify->useNoise = false; $Verify->codeSet = 'abcdefghkmnprstuvwxyzABCDEFGHKMNPRSTUVWXYZ23456789'; $Verify->imageW = 130; $Verify->imageH = 50; //$Verify->expire = 600; $Verify->entry(); }
可以根据自己的需求配置参数
二、在页面渲染,生成的验证码就是一张图片,静态页面代码如下:
<p> <input type="text" name="verify" class="captcha-text" placeholder="请输入验证码"> <i class="yanzheng"><img alt="验证码" id="captcha-container" src="{:ROOT}index.php?m=Admin&c=Verify&a=verify_c" title="点击刷新"></i> </p>
img的src就是生成验证码的地址
三、点击验证码图片刷新,生成新的验证码,就是通过js修改img的src属性,后面加一个参数random。js代码如下:
<script> /*验证码图片点击刷新*/ var captcha_img = $('#captcha-container'); var verifyimg = captcha_img.attr("src"); captcha_img.attr('title', '点击刷新'); captcha_img.click(function(){ if( verifyimg.indexOf('?')>0){ $(this).attr("src", verifyimg+'&random='+Math.random()); }else{ $(this).attr("src", verifyimg.replace(/?.*$/,'')+'?'+Math.random()); } }); </script>
四、验证码校验,表单提交后获取到用户输入的验证码,
// 检查验证码 $verify = I('post.verify'); if(!check_verify($verify)){ $this->error("验证码错误",$this->site_url,9); }
然后将check_verify()函数放到公共的php中,方便整个项目用,代码如下:
//验证码检查 function check_verify($code, $id = ""){ $verify = new ThinkVerify(); return $verify->check($code, $id); }
$id是生成验证码的id如果只有一个验证码就不需要了。
补充:生成多个验证码时,需要给每个验证码设置id,即调用$Verify->entry()时,在括号中传入id值。
验证码1:
$Verify->entry(1);
验证码1:
$Verify->entry(2);