本文实例讲述了thinkPHP中验证码的简单实现方法。分享给大家供大家参考,具体如下:
运行效果图如下:
1.php端生成验证码函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
public function verify(){
// 验证码
import( "@.Util.Image" );
Image::buildImageVerify(4,1, 'png' ,40,20, 'verify' );
}
/**
* 生成图像验证码
* @static
* @access public
* @param string $length 位数
* @param string $mode 类型
* @param string $type 图像格式
* @param string $width 宽度
* @param string $height 高度
* @return string
*/
static function buildImageVerify( $length =4, $mode =1, $type = 'png' , $width =48, $height =22, $verifyName = 'verify' ) {
import( 'ORG.Util.String' );
$randval = String::randString( $length , $mode );
session( $verifyName , md5( $randval ));
$width = ( $length * 10 + 10) > $width ? $length * 10 + 10 : $width ;
if ( $type != 'gif' && function_exists( 'imagecreatetruecolor' )) {
$im = imagecreatetruecolor( $width , $height );
} else {
$im = imagecreate( $width , $height );
}
$r = Array(225, 255, 255, 223);
$g = Array(225, 236, 237, 255);
$b = Array(225, 236, 166, 125);
$key = mt_rand(0, 3);
$backColor = imagecolorallocate( $im , $r [ $key ], $g [ $key ], $b [ $key ]); //背景色(随机)
$borderColor = imagecolorallocate( $im , 100, 100, 100); //边框色
imagefilledrectangle( $im , 0, 0, $width - 1, $height - 1, $backColor );
imagerectangle( $im , 0, 0, $width - 1, $height - 1, $borderColor );
$stringColor = imagecolorallocate( $im , mt_rand(0, 200), mt_rand(0, 120), mt_rand(0, 120));
// 干扰
for ( $i = 0; $i < 10; $i ++) {
imagearc( $im , mt_rand(-10, $width ), mt_rand(-10, $height ), mt_rand(30, 300), mt_rand(20, 200), 55, 44, $stringColor );
}
for ( $i = 0; $i < 25; $i ++) {
imagesetpixel( $im , mt_rand(0, $width ), mt_rand(0, $height ), $stringColor );
}
for ( $i = 0; $i < $length ; $i ++) {
imagestring( $im , 5, $i * 10 + 5, mt_rand(1, 8), $randval { $i }, $stringColor );
}
Image::output( $im , $type );
}
|
生成图片的同时,传入到session中。
2.页面端
1
|
< img id = "verifyImg" src = "{sh::U('Agent/Login/verify')}" onClick = "changeVerify()" title = "点击刷新验证码" /></ div >
|
直接src中调用。
点击触发改变。
1
2
3
4
5
|
function changeVerify(){
verifyURL = "{sh::U('Agent/Login/verify')}" ;
$( "#verifyImg" ).attr( "src" ,verifyURL);
return false;
}
|
3.后台验证,对比post字段与session中的验证码是否一致。
1
2
3
|
if ( $_SESSION [ 'verify' ] != md5( $_POST [ 'verify' ])) {
$this ->error( '验证码错误!' );
}
|
希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。