Rumah > pembangunan bahagian belakang > tutorial php > 实例分析一个实用的php验证码类

实例分析一个实用的php验证码类

墨辰丷
Lepaskan: 2023-03-26 22:46:02
asal
1356 orang telah melayarinya

这篇文章主要为大家详细介绍了一个实用的php验证码类,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

万能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(&#39;Content-type:text/html;charset=utf8&#39;);

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 == &#39;code&#39;){

      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(&#39;不支持此类验证码类型&#39;);

    }

    return $code;

  }

  protected function getNumberCode(){

    $str = join(&#39;&#39;, range(0, 9));

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

  }

  protected function getCharCode(){

    $str = join(&#39;&#39;, range(&#39;a&#39;, &#39;z&#39;));

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

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

  }

  protected function getNumCharCode(){

    $numstr = join(&#39;&#39;,range(0, 9));

    $str =join(&#39;&#39;, range(&#39;a&#39;, &#39;z&#39;));

    $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(&#39;Content-Type:image/png&#39;);

    imagepng($this->image);

  }

  public function outImage(){

//     创建画布

    $this->createImage();

//     填充背景色

    $this->fillBack();

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

    $this->drawChar();

//     添加干扰元素

    $this->drawDisturb();

//     添加线条

    $this->drawLine();

//     输出并显示

    $this->show();

  }

}

Salin selepas log masuk

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

test.php

1

2

3

4

5

6

7

8

<?php

//开启session

session_start();

require_once &#39;code.php&#39;;

 

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

$_SESSION[&#39;code&#39;]= $code->getCode();

$code->outImage();

Salin selepas log masuk

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[&#39;dosubmit&#39;])){

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

      $sessionCode=strtolower($_SESSION[&#39;code&#39;]);

      //获取输入的验证码

      $code=strtolower($_POST[&#39;code&#39;]);

      //判断是否相等

      if($sessionCode==$code){

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

      }else{

        echo "<script type=&#39;text/javascript&#39;>alert(&#39;验证码错误!&#39;);</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=&#39;text&#39;],input[type=&#39;password&#39;]{

          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=&#39;test.php?Math.random()&#39;"/>

          </li>

          <li>

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

          </li>

        </ul>

      </form>

    </body>

  </html>

Salin selepas log masuk

以上就是本文的全部内容,希望对大家的学习有所帮助。

相关推荐:

如何建漂亮的PHP验证码类文件及调用方式 

php验证码类的调用方式实例详解

PHP验证码类文件及调用方式的介绍

Atas ialah kandungan terperinci 实例分析一个实用的php验证码类. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan