热搜:NVER node 开发 php

PHP雪花背景验证码

2024-07-25 14:20:02
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 codeNum; $i ++){

                 $this ->checkCode .= $this ->charset{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 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

                 $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

                 $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); 

             imagedestroy( $this ->image);

         }

         

         /* 销毁句柄,释放资源 */

         function __destruct() {

             imagedestroy( $this ->image);

         }

         

     }

imageCode.php

1

2

3

4

<?php

     session_start();        //开启SESSION

     require_once 'ValidateCode.class.php' ;

     echo new ValidateCode();

image.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

    

    

楠岃瘉鐮