欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

PHP雪花背景验证码

程序员文章站 2022-04-06 09:33:29
...
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

/**

* 验证码类

* @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

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

验证码

PHP雪花背景验证码

/** 用于 */

session_start(); //开启SESSION

if (isset( $_POST [ 'submit' ])){ //判断用户提交后执行

/* 判断用户在表单中输入的字符串和验证码图片中的字符串是否相同 */

if ( strtoupper (trim( $_POST [ "code" ])) == $_SESSION [ 'code' ]){ //如果验证码输出成功

echo '验证码输入成功
' ; //输出成功的提示信息

} else { //如果验证码输入失败

echo '验证码输入错误!!
' ; //输出失败的输入信息

}

}

?>



来自为知笔记(Wiz)