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
48
49
50
51
52
53
54
55
56
|
<?php //仿制ecshop验证码(四位大写字母和数字、背景) //处理码值(四位大写字母和数字组成) //所有的可能的字符集合 $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789' ; $chars_len = strlen ( $chars ); //集合长度 //随机选取 $code_len = 4; //验证码长度 $code = '' ; //验证码值初始化 for ( $i =0; $i < $code_len ;++ $i ){ //随机取得一个字符下标 $rand_index = mt_rand(0, $chars_len -1); //利用字符串的下标操做,获得选择的字符 $code .= $chars [ $rand_index ]; } //echo $code; //存储于session中(用于校验) session_start(); $_SESSION [ 'code' ] = $code ; //验证码图像(已知的背景图片) //处理背景 $bg_file = './captcha/captcha_bg' . mt_rand(1,5). '.jpg' ; //依据该图片,创建画布 $image = imagecreatefromjpeg( $bg_file ); //简单的将字符串写在画布上的函数(imageString();) //imageString(画布,字体,位置X, 位置y,字符串内容,颜色); //字体:imagestring函数,使用的内置字体。由1-5表示。位置由字符串左上角的坐标决定。颜色也是需要预先分配好的。imagecolorallocate(); //分配字体颜色(随机分配黑色或者白色) if (mt_rand(0,1)==1){ $str_color = imagecolorallocate( $image ,0,0,0); //黑色 } else { $str_color = imagecolorallocate( $image ,255,0xff,255); //白色 } //内置5号字体 $font = 5; //位置 //画布大小 $image_w = imagesx( $image ); $image_h = imagesy( $image ); //获得字体的宽和高 $font_w = imagefontwidth( $font ); $font_h = imagefontheight( $font ); //获得字符串的宽高 $str_w = $font_w * $code_len ; $str_h = $font_h ; //计算位置 $str_x = ( $image_w - $str_w ) / 2; $str_y = ( $image_h - $str_h ) / 2; //字符串 imagestring( $image , $font , $str_x , $str_y , $code , $str_color ); //输出和销毁画布 header( "content-type:image/jpeg" ); imagejpeg( $image ); imagedestroy( $image ); |
封装验证码工具类:
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
48
49
50
51
52
53
54
55
56
57
58
|
//验证码工具类(将所有和验证码操作相关的全部封装到该类中) class Captcha{ /*生成验证码*/ public function makeImage( $code_len =4){ //仿制ecshop验证码(四位大写字母和数字、背景) //处理码值(四位大写字母和数字组成) //所有的可能的字符集合 $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789' ; $chars_len = strlen ( $chars ); //集合长度 //随机选取 $code = '' ; //验证码值初始化 for ( $i =0; $i < $code_len ;++ $i ){ //随机取得一个字符下标 $rand_index = mt_rand(0, $chars_len -1); //利用字符串的下标操做,获得选择的字符 $code .= $chars [ $rand_index ]; } //echo $code; //存储于session中(用于校验) @session_start(); $_SESSION [ 'code' ] = $code ; //验证码图像(已知的背景图片) //处理背景 $bg_file = TOOL . './captcha/captcha_bg' . mt_rand(1,5). '.jpg' ; //依据该图片,创建画布 $image = imagecreatefromjpeg( $bg_file ); //简单的将字符串写在画布上的函数(imageString();) //imageString(画布,字体,位置X, 位置y,字符串内容,颜色); //字体:imagestring函数,使用的内置字体。由1-5表示。位置由字符串左上角的坐标决定。颜色也是需要预先分配好的。imagecolorallocate(); //分配字体颜色(随机分配黑色或者白色) if (mt_rand(0,1)==1){ $str_color = imagecolorallocate( $image ,0,0,0); //黑色 } else { $str_color = imagecolorallocate( $image ,255,0xff,255); //白色 } //内置5号字体 $font = 5; //位置 //画布大小 $image_w = imagesx( $image ); $image_h = imagesy( $image ); //获得字体的宽和高 $font_w = imagefontwidth( $font ); $font_h = imagefontheight( $font ); //获得字符串的宽高 $str_w = $font_w * $code_len ; $str_h = $font_h ; //计算位置 $str_x = ( $image_w - $str_w ) / 2; $str_y = ( $image_h - $str_h ) / 2; //字符串 imagestring( $image , $font , $str_x , $str_y , $code , $str_color ); //输出和销毁画布 header( "content-type:image/jpeg" ); imagejpeg( $image ); imagedestroy( $image ); } } |
以上所述是小编给大家介绍的PHP中仿制 ecshop验证码实例,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!