PHP雪花背景驗證碼

ValidateCode.class.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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
<?php
     /**
      * 驗證碼類
      * @author staven
      *
      */
     class ValidateCode{
         
         private $width ;         //驗證碼圖片的寬度
         private $height ;        //驗證碼圖片的高度
         private $checkCode ;     //驗證碼字符
         private $codeNum ;       //驗證碼字符個數
         private $font ;          //字體
         private $fontSize ;      //字體大小
         private $fontColor ;     //字體顏色
         private $image ;         //驗證碼句柄
         private $charset ;       //驗證字符隨機因子
         
         //構造器方法初始化
         function __construct( $width =100, $height =20, $codeNum =4, $fontSize = 12){
             $this ->width = $width ;
             $this ->height = $height ;
             $this ->codeNum = $codeNum ;
             $this ->fontSize = $fontSize ;
             $this ->font = dirname( __FILE__ ) . '/font/elephant.ttf' ;
             $this ->charset = 'abcdefghkmnprstuvwxyzABCDEFGHKMNPRSTUVWXYZ23456789' ;      //提供隨機因子
             $this ->checkCode = $this ->createCheckCode();
             
         }
         
         /* 用於輸出驗證碼圖片,而且將驗證碼信息寫入session */
         function __toString(){
             /* 加到session中, 存儲下標爲code */
             $_SESSION [ "code" ] = strtoupper ( $this ->checkCode);
             $this ->outImage();
             return '' ;
         }
         
         /* 生成隨機驗證碼字符 */
         private function createCheckCode(){
             
             for ( $i =0; $i < $this ->codeNum; $i ++){
                 $this ->checkCode .= $this ->charset{mt_rand(0, strlen ( $this ->charset)-1)};
             }
             return $this ->checkCode;
         }
         
         /* 輸出驗證碼 */
         private function outImage(){
             $this ->getCreateImage();
             $this ->createLine();
             $this ->outputText();
             $this ->outputImage();
         }
         
          /* 生成驗證碼背景圖片 */
         private function getCreateImage(){
             $this ->image = imagecreatetruecolor( $this ->width, $this ->height);
             $color = imagecolorallocate( $this ->image, mt_rand(157,255), mt_rand(157,255), mt_rand(157,255));
             imagefilledrectangle( $this ->image,0, $this ->height, $this ->width,0, $color ); 
         }
         
         /* 向句柄圖片中寫入文字信息 */
         private function outputText(){
             $_x = $this ->width / $this ->codeNum; 
             for ( $i =0; $i < $this ->codeNum; $i ++) { 
                 $this ->fontcolor = imagecolorallocate( $this ->image,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156)); 
                 imagettftext( $this ->image, $this ->fontSize,mt_rand(-30,30), $_x * $i +mt_rand(1,5), $this ->height / 1.4, $this ->fontColor, $this ->font, $this ->checkCode[ $i ]); 
            
         }
         
         /*  建立雪花圖案 */
         private function createLine() {
             for ( $i =0; $i <6; $i ++) {
                 $color = imagecolorallocate( $this ->image,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156));
                 imageline( $this ->image,mt_rand(0, $this ->width),mt_rand(0, $this ->height),mt_rand(0, $this ->width),mt_rand(0, $this ->height), $color );
             }
             for ( $i =0; $i <100; $i ++) {
                 $color = imagecolorallocate( $this ->image,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255));
                 imagestring( $this ->image,mt_rand(1,5),mt_rand(0, $this ->width),mt_rand(0, $this ->height), '*' , $color );
             }
         }
         
         /* 生成驗證碼圖片 */
         private function outputImage(){
             header( 'Content-type:image/png' ); 
             imagepng( $this ->image); 
            
         }
         
         /* 銷燬句柄,釋放資源 */
         function __destruct() {
             imagedestroy( $this ->image);
         }
         
     }

imageCode.phpphp

1
2
3
4
<?php
     session_start();        //開啓SESSION
     require_once 'ValidateCode.class.php' ;
     echo new ValidateCode();

image.phphtml

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
<!DOCTYPE html>
<html>
<head>
     <meta charset= "gbk" >
     <title>驗證碼</title>
</head>
<body>
     <img src= "imagecode.php" alt= "看不清楚,換一張" style= "cursor: pointer;" onclick= "this.src='imagecode.php?'+new Date().getTime();" />
     <form method= "POST" action= "image.php" >
         <input type= "text"  size= "4" name= "code" />
         <input type= "submit" name= "submit" value= "提交" >
     </form>
</body>
</html>
<?php
   
     /** 用於 */
     session_start();                                                    //開啓SESSION
     if (isset( $_POST [ 'submit' ])){                                        //判斷用戶提交後執行
         /* 判斷用戶在表單中輸入的字符串和驗證碼圖片中的字符串是否相同  */
         if ( strtoupper (trim( $_POST [ "code" ])) == $_SESSION [ 'code' ]){      //若是驗證碼輸出成功
             echo '驗證碼輸入成功<br>' ;                                   //輸出成功的提示信息
         } else {                                                          //若是驗證碼輸入失敗
             echo '<font color="red">驗證碼輸入錯誤!!</font><br>' ;    //輸出失敗的輸入信息
         }
     }
?>

 

 



相關文章
相關標籤/搜索