(1)首先是简单生成四个字符,到底随机产生几个字符是自己设定的:
代码展示:
1 <?php 2 3 4 /** 5 * 验证码 工具 6 */ 7 8 9 10 /** 11 * 输出生成的验证码输出 12 * 13 * @param $code_len=4 码值的长度 14 * @return void 15 */ 16 17 18 $chars = ‘ABCDEFGHIJKLMNPQRSTUVWXYZ123456789‘;//所有可能字符 19 $chars_len = strlen($chars); 20 $code_len=4;//设置码长,这个是自己设定的 21 $code = ‘‘;//初始化码值字符串 22 for($i=1; $i<=$code_len;++$i) { 23 $rand_index = mt_rand(0, $chars_len-1);//就是堆积生成一个字符------------------就是得到$chars的下标 24 $code .= $chars[$rand_index];//字符串支持[]操作,通过下标取得某个字符---------------------由下标找到对应的字符,并且每次都连接起来。 25 } 26 echo $code;
然后我把这个输出的这四个字符存在session中,那么我就可以通过session来访问了:
在b.php中读到session[‘captcha_code‘]的值
1 <?php 2 session_start(); 3 echo $_SESSION[‘captcha_code‘];
最好背景图片是两种格式,jpg格式和gif格式,因为有的服务器可能支持其中的一种。
(2)加了背景图,我随便截的图,一共两张png的图
结果展示:
注意点展示:
然后我的代码:
1 <?php 2 3 4 /** 5 * 验证码 工具 6 */ 7 8 9 10 /** 11 * 输出生成的验证码输出 12 * 13 * @param $code_len=4 码值的长度 14 * @return void 15 */ 16 17 18 $chars = ‘ABCDEFGHIJKLMNPQRSTUVWXYZ123456789‘;//所有可能字符 19 $chars_len = strlen($chars); 20 $code_len=4;//设置码长,这个是自己设定的 21 $code = ‘‘;//初始化码值字符串 22 for($i=1; $i<=$code_len;++$i) { 23 $rand_index = mt_rand(0, $chars_len-1);//就是堆积生成一个字符,这个得到上面$chars字符串的下标 24 $code .= $chars[$rand_index];//由下标找到对应的字符,字符串支持[]操作,通过下标取得某个字符 25 } 26 // echo $code; 27 28 //存储于session,用于验证 29 @session_start();//保证session机制一定是开启的,同时重复开启不会报错,@屏蔽错误。 30 $_SESSION[‘captcha_code‘] = $code; 31 32 //生成验证码图片 33 34 //背景图,随便加的 35 $bg_file = ‘captcha‘ . mt_rand(1, 2) . ‘.png‘; 36 37 //基于jpg格式的图片创建画布 38 $img = imagecreatefrompng($bg_file); 39 40 //随机分配字符串颜色,就是三分之一的比例 41 $str_color = mt_rand(1, 3) == 1 ? imageColorAllocate($img, 0, 0, 0) : imageColorAllocate($img, 0xff, 0xff, 0xff); 42 43 //字符串 44 $font = 5; 45 // 画布尺寸 46 $img_w = imageSX($img); 47 $img_h = imageSY($img); 48 // 字体的尺寸 49 $font_w = imageFontWidth($font); 50 $font_h = imageFontHeight($font); 51 // 字符串的尺寸 52 $code_w = $font_w * $code_len; 53 $code_h = $font_h; 54 $x = ($img_w-$code_w)/2; 55 $y = ($img_h-$code_h)/2; 56 imageString($img, $font, $x, $y, $code, $str_color); 57 58 //输出 59 header(‘Content-Type: image/jpeg;‘); 60 imagepng($img); //销毁图像 imageDestory($img);
时间: 2024-10-12 08:49:42