一个实用的php验证码类

2025-05-29 0 22

万能php验证码类,供大家参考,具体内容如下

code.php验证码类,类的名称最好和文件名的名称一样,这样有利于我们的查看。

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

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127
<?php

header('Content-type:text/html;charset=utf8');

class Code{

// 验证码个数$number

protected $number;

// 验证码类型$codeType

protected $codeType;

// 验证码图像宽度$width

protected $width;

// 验证码$height

protected $height;

// 验证码字符串$code

protected $code;

// 图像资源$image

protected $image;

public function __construct($number=4,$codeType=0,$height=50,$width=100){

//初始化自己的成员属性

$this->number=$number;

$this->codeType=$codeType;

$this->width = $width;

$this->height= $height;

//生成验证码函数

$this->code = $this ->createCode();

}

public function __get($name){

if ($name == 'code'){

return $this->code;

}

return false;

}

/*获取验证码*/

public function getCode() {

return $this->code;

}

/*图像资源销毁*/

public function __destruct(){

imagedestroy($this->image);

}

protected function createCode(){

//通过你的验证码类型生成验证码

switch ($this->codeType){

case 0: //纯数字

$code = $this->getNumberCode();

break;

case 1: //纯字母的

$code = $this->getCharCode();

break;

case 2: //数字和字母混合

$code = $this->getNumCharCode();

break;

default:

die('不支持此类验证码类型');

}

return $code;

}

protected function getNumberCode(){

$str = join('', range(0, 9));

return substr(str_shuffle($str),0, $this->number);

}

protected function getCharCode(){

$str = join('', range('a', 'z'));

$str = $str.strtoupper($str);

return substr(str_shuffle($str),0,$this->number);

}

protected function getNumCharCode(){

$numstr = join('',range(0, 9));

$str =join('', range('a', 'z'));

$str =$numstr.$str.strtoupper($str);

return substr(str_shuffle($str), 0,$this->number);

}

protected function createImage(){

$this->image = imagecreatetruecolor($this->width,

$this->height);

}

protected function fillBack(){

imagefill($this->image, 0, 0, $this->lightColor());

}

/*浅色*/

protected function lightColor(){

return imagecolorallocate($this->image, mt_rand(133,255), mt_rand(133,255), mt_rand(133,255));

}

/*深色*/

protected function darkColor(){

return imagecolorallocate($this->image, mt_rand(0,120), mt_rand(0,120), mt_rand(0,120));

}

protected function drawChar(){

$width = ceil($this->width / $this->number);

for ($i=0; $i< $this->number;$i++){

$x = mt_rand($i*$width+5, ($i+1)*$width-10);

$y = mt_rand(0, $this->height -15);

imagechar($this->image, 5, $x, $y, $this->code[$i], $this->darkColor());

}

}

protected function drawLine(){

for ($i=0;$i<5;$i++) {

imageline($this->image,mt_rand(0,$this->width),mt_rand(0,$this->height),mt_rand(0,$this->width),mt_rand(0,$this->height),$this->darkColor());

}

}

protected function drawDisturb(){

for ($i=0;$i<150;$i++){

$x=mt_rand(0, $this->width);

$y=mt_rand(0, $this->height);

imagesetpixel($this->image, $x, $y, $this->lightColor());

}

}

protected function show(){

header('Content-Type:image/png');

imagepng($this->image);

}

public function outImage(){

// 创建画布

$this->createImage();

// 填充背景色

$this->fillBack();

// 将验证码字符串花到画布上

$this->drawChar();

// 添加干扰元素

$this->drawDisturb();

// 添加线条

$this->drawLine();

// 输出并显示

$this->show();

}

}

test.php是new一个新的验证码,并把它保存到session中,为我们验证码的验证起到保存和存储的作用。

test.php

?

1

2

3

4

5

6

7

8
<?php

//开启session

session_start();

require_once 'code.php';

$code= new Code(4,1,50,100);

$_SESSION['code']= $code->getCode();

$code->outImage();

login.php就是最后的验证。

login.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
<?php

//开启Session

session_start();

//判断是否提交

if(isset($_POST['dosubmit'])){

//获取session中的验证码并转为小写

$sessionCode=strtolower($_SESSION['code']);

//获取输入的验证码

$code=strtolower($_POST['code']);

//判断是否相等

if($sessionCode==$code){

echo "<script type='text/javascript'>alert('验证码正确!');</script>";

}else{

echo "<script type='text/javascript'>alert('验证码错误!');</script>";

}

}

?>

<!DOCTYPE html>

<html>

<head>

<title></title>

<meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>

<style type="text/css">

*{margin:0px;padding:0px;}

ul{

width:400px;

list-style:none;

margin:50px auto;

}

li{

padding:12px;

position:relative;

}

label{

width:80px;

display:inline-block;

float:left;

line-height:30px;

}

input[type='text'],input[type='password']{

height:30px;

}

img{

margin-left:10px;

}

input[type="submit"]{

margin-left:80px;

padding:5px 10px;

}

</style>

</head>

<body>

<form action="login.php" method="post">

<ul>

<li>

<label>用户名:</label>

<input type="text" name="username"/>

</li>

<li>

<label>密码:</label>

<input type="password" name="password"/>

</li>

<li>

<label>验证码:</label>

<input type="text" name="code" size="4" style="float:left"/>

<img src="test.php" onclick="this.src='test.php?Math.random()'"/>

</li>

<li>

<input type="submit" value="登录" name="dosubmit"/>

</li>

</ul>

</form>

</body>

</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持快网idc。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 一个实用的php验证码类 https://www.kuaiidc.com/94203.html

相关文章

发表评论
暂无评论