本文实例讲述了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程序设计有所帮助。