当前位置:Gxlcms > PHP教程 > PHP雪花背景验证码

PHP雪花背景验证码

时间:2021-07-01 10:21:17 帮助过:7人阅读

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

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

验证码

看不清楚,换一张

/** 用于 */

session_start(); //开启SESSION

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

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

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

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

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

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

}

}

?>



来自为知笔记(Wiz)

人气教程排行