Home > php教程 > php手册 > PHP generates image verification code demo [OOP object-oriented version]

PHP generates image verification code demo [OOP object-oriented version]

WBOY
Release: 2016-10-08 16:04:44
Original
1202 people have browsed it

The following is a demo of generating image verification codes that I wrote in PHP this afternoon, for reference only.

This demo is divided into 4 files in total, the specific code is as follows:

1. Code in code.html:

<span style="color: #008080;"> 1</span> <span style="color: #0000ff;"><!</span><span style="color: #ff00ff;">doctype html</span><span style="color: #0000ff;">></span>
<span style="color: #008080;"> 2</span> <span style="color: #0000ff;"><</span><span style="color: #800000;">html </span><span style="color: #ff0000;">lang</span><span style="color: #0000ff;">="en"</span><span style="color: #0000ff;">></span>
<span style="color: #008080;"> 3</span>     <span style="color: #0000ff;"><</span><span style="color: #800000;">head</span><span style="color: #0000ff;">></span>
<span style="color: #008080;"> 4</span>         <span style="color: #0000ff;"><</span><span style="color: #800000;">meta </span><span style="color: #ff0000;">charset</span><span style="color: #0000ff;">="utf-8"</span> <span style="color: #0000ff;">/></span>
<span style="color: #008080;"> 5</span>         <span style="color: #0000ff;"><</span><span style="color: #800000;">title</span><span style="color: #0000ff;">></span>登录、注册验证码生成<span style="color: #0000ff;"></</span><span style="color: #800000;">title</span><span style="color: #0000ff;">></span>
<span style="color: #008080;"> 6</span>     <span style="color: #0000ff;"></</span><span style="color: #800000;">head</span><span style="color: #0000ff;">></span>
<span style="color: #008080;"> 7</span>     <span style="color: #0000ff;"><</span><span style="color: #800000;">body</span><span style="color: #0000ff;">></span>
<span style="color: #008080;"> 8</span>          <span style="color: #008000;"><!--</span>
<span style="color: #008080;"> 9</span> <span style="color: #008000;">             * @Description  网站登录/注册验证码生成类
</span><span style="color: #008080;">10</span> <span style="color: #008000;">             * @Author  赵一鸣
</span><span style="color: #008080;">11</span> <span style="color: #008000;">             * @OnlineDemo http://www.zymseo.com/demo/verificationcode/code.html
</span><span style="color: #008080;">12</span> <span style="color: #008000;">             * @Date  2016年10月6日 
</span><span style="color: #008080;">13</span>          <span style="color: #008000;">--></span>
<span style="color: #008080;">14</span>         <span style="color: #0000ff;"><</span><span style="color: #800000;">form </span><span style="color: #ff0000;">action</span><span style="color: #0000ff;">="checkcode.php"</span><span style="color: #ff0000;"> method</span><span style="color: #0000ff;">="post"</span><span style="color: #0000ff;">></span>
<span style="color: #008080;">15</span>             <span style="color: #0000ff;"><</span><span style="color: #800000;">input </span><span style="color: #ff0000;">type</span><span style="color: #0000ff;">="text"</span><span style="color: #ff0000;"> name</span><span style="color: #0000ff;">="code"</span> <span style="color: #0000ff;">/><</span><span style="color: #800000;">br</span><span style="color: #0000ff;">/></span>
<span style="color: #008080;">16</span>             <span style="color: #0000ff;"><</span><span style="color: #800000;">img </span><span style="color: #ff0000;">src</span><span style="color: #0000ff;">="showcode.php"</span><span style="color: #ff0000;"> onclick</span><span style="color: #0000ff;">="this.setAttribute('src','showcode.php?'+Math.random())"</span> <span style="color: #0000ff;">/></span>
<span style="color: #008080;">17</span>             <span style="color: #0000ff;"><</span><span style="color: #800000;">span</span><span style="color: #0000ff;">></span>看不清?点击图片即可切换验证码<span style="color: #0000ff;"></</span><span style="color: #800000;">span</span><span style="color: #0000ff;">><</span><span style="color: #800000;">br</span><span style="color: #0000ff;">/></span>
<span style="color: #008080;">18</span>             <span style="color: #0000ff;"><</span><span style="color: #800000;">input </span><span style="color: #ff0000;">type</span><span style="color: #0000ff;">="submit"</span><span style="color: #ff0000;"> name</span><span style="color: #0000ff;">="sub"</span><span style="color: #ff0000;"> value</span><span style="color: #0000ff;">="登录/注册"</span> <span style="color: #0000ff;">/></span>
<span style="color: #008080;">19</span>         <span style="color: #0000ff;"></</span><span style="color: #800000;">form</span><span style="color: #0000ff;">></span>
<span style="color: #008080;">20</span>     <span style="color: #0000ff;"></</span><span style="color: #800000;">body</span><span style="color: #0000ff;">></span>
<span style="color: #008080;">21</span> <span style="color: #0000ff;"></</span><span style="color: #800000;">html</span><span style="color: #0000ff;">></span>
Copy after login

2. Code in createcode.class.php:

<span style="color: #008080;"> 1</span> <?<span style="color: #000000;">php
</span><span style="color: #008080;"> 2</span>     <span style="color: #008000;">/*</span><span style="color: #008000;">*
</span><span style="color: #008080;"> 3</span> <span style="color: #008000;">     * @Description  网站登录/注册验证码生成类
</span><span style="color: #008080;"> 4</span> <span style="color: #008000;">     * @Author  赵一鸣
</span><span style="color: #008080;"> 5</span> <span style="color: #008000;">     * @OnlineDemo http://www.zymseo.com/demo/verificationcode/code.html
</span><span style="color: #008080;"> 6</span> <span style="color: #008000;">     * @Date  2016年10月6日 
</span><span style="color: #008080;"> 7</span>      <span style="color: #008000;">*/</span>
<span style="color: #008080;"> 8</span>     <span style="color: #0000ff;">class</span><span style="color: #000000;"> Createcode{
</span><span style="color: #008080;"> 9</span>         <span style="color: #008000;">//</span><span style="color: #008000;">画布资源</span>
<span style="color: #008080;">10</span>         <span style="color: #0000ff;">public</span> <span style="color: #800080;">$img</span><span style="color: #000000;">;
</span><span style="color: #008080;">11</span>         <span style="color: #008000;">//</span><span style="color: #008000;">画布宽度</span>
<span style="color: #008080;">12</span>         <span style="color: #0000ff;">private</span> <span style="color: #800080;">$img_width</span><span style="color: #000000;">;
</span><span style="color: #008080;">13</span>         <span style="color: #008000;">//</span><span style="color: #008000;">画布高度</span>
<span style="color: #008080;">14</span>         <span style="color: #0000ff;">private</span> <span style="color: #800080;">$img_height</span><span style="color: #000000;">;
</span><span style="color: #008080;">15</span>         <span style="color: #008000;">//</span><span style="color: #008000;">画布颜色</span>
<span style="color: #008080;">16</span>         <span style="color: #0000ff;">private</span> <span style="color: #800080;">$img_bgcolor</span><span style="color: #000000;">;
</span><span style="color: #008080;">17</span>         <span style="color: #008000;">//</span><span style="color: #008000;">验证码文字内容</span>
<span style="color: #008080;">18</span>         <span style="color: #0000ff;">private</span> <span style="color: #800080;">$str_content</span><span style="color: #000000;">;
</span><span style="color: #008080;">19</span>         <span style="color: #008000;">//</span><span style="color: #008000;">生成的验证码内容</span>
<span style="color: #008080;">20</span>         <span style="color: #0000ff;">private</span> <span style="color: #800080;">$code_content</span><span style="color: #000000;">;
</span><span style="color: #008080;">21</span>         <span style="color: #008000;">//</span><span style="color: #008000;">验证码颜色</span>
<span style="color: #008080;">22</span>         <span style="color: #0000ff;">private</span> <span style="color: #800080;">$code_content_color</span><span style="color: #000000;">;
</span><span style="color: #008080;">23</span>         <span style="color: #008000;">//</span><span style="color: #008000;">构造函数</span>
<span style="color: #008080;">24</span>         <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span> __construct(<span style="color: #800080;">$img_width</span>,<span style="color: #800080;">$img_height</span>,<span style="color: #800080;">$str_content</span>,<span style="color: #800080;">$code_content_color</span><span style="color: #000000;">){
</span><span style="color: #008080;">25</span>             <span style="color: #0000ff;">if</span>(<span style="color: #800080;">$this</span>-><span style="color: #000000;">gdcheck()){
</span><span style="color: #008080;">26</span>                 <span style="color: #800080;">$this</span>->img_width = <span style="color: #800080;">$img_width</span><span style="color: #000000;">;
</span><span style="color: #008080;">27</span>                 <span style="color: #800080;">$this</span>->img_height = <span style="color: #800080;">$img_height</span><span style="color: #000000;">;
</span><span style="color: #008080;">28</span>                 <span style="color: #800080;">$this</span>->str_content = <span style="color: #800080;">$str_content</span><span style="color: #000000;">;
</span><span style="color: #008080;">29</span>                 <span style="color: #800080;">$this</span>->code_content_color = <span style="color: #800080;">$code_content_color</span><span style="color: #000000;">;
</span><span style="color: #008080;">30</span>                 <span style="color: #800080;">$this</span>-><span style="color: #000000;">get_code();
</span><span style="color: #008080;">31</span>                 <span style="color: #800080;">$this</span>-><span style="color: #000000;">session_code();
</span><span style="color: #008080;">32</span> <span style="color: #000000;">            }
</span><span style="color: #008080;">33</span> <span style="color: #000000;">        }
</span><span style="color: #008080;">34</span>         <span style="color: #008000;">//</span><span style="color: #008000;">生成画布</span>
<span style="color: #008080;">35</span>         <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> get_img(){
</span><span style="color: #008080;">36</span>             <span style="color: #008000;">//</span><span style="color: #008000;">定义画布</span>
<span style="color: #008080;">37</span>             <span style="color: #800080;">$this</span>->img = imagecreatetruecolor(<span style="color: #800080;">$this</span>->img_width, <span style="color: #800080;">$this</span>-><span style="color: #000000;">img_height);
</span><span style="color: #008080;">38</span>             <span style="color: #008000;">//</span><span style="color: #008000;">画布背景色</span>
<span style="color: #008080;">39</span>             <span style="color: #800080;">$this</span>->img_bgcolor = imagecolorallocate(<span style="color: #800080;">$this</span>->img, <span style="color: #008080;">mt_rand</span>(0,255), <span style="color: #008080;">mt_rand</span>(0,255), <span style="color: #008080;">mt_rand</span>(0,255<span style="color: #000000;">));
</span><span style="color: #008080;">40</span>             <span style="color: #008000;">//</span><span style="color: #008000;">给画图填充背景色</span>
<span style="color: #008080;">41</span>             imagefill(<span style="color: #800080;">$this</span>->img, 0, 0, <span style="color: #800080;">$this</span>-><span style="color: #000000;">img_bgcolor);
</span><span style="color: #008080;">42</span>             <span style="color: #008000;">//</span><span style="color: #008000;">取得画布的宽高</span>
<span style="color: #008080;">43</span>             <span style="color: #800080;">$img_width</span> = imagesx(<span style="color: #800080;">$this</span>-><span style="color: #000000;">img);
</span><span style="color: #008080;">44</span>             <span style="color: #800080;">$img_height</span> = imagesy(<span style="color: #800080;">$this</span>-><span style="color: #000000;">img);
</span><span style="color: #008080;">45</span>             <span style="color: #008000;">//</span><span style="color: #008000;">画布中插入验证码</span>
<span style="color: #008080;">46</span>             imagestring(<span style="color: #800080;">$this</span>->img, 5, (<span style="color: #800080;">$this</span>->img_width/3), (<span style="color: #800080;">$this</span>->img_height/2.5), <span style="color: #800080;">$this</span>->code_content, imagecolorallocate(<span style="color: #800080;">$this</span>->img, <span style="color: #008080;">hexdec</span>(<span style="color: #008080;">substr</span>(<span style="color: #800080;">$this</span>->code_content_color, 1,2)), <span style="color: #008080;">hexdec</span>(<span style="color: #008080;">substr</span>(<span style="color: #800080;">$this</span>->code_content_color, 3,2)), <span style="color: #008080;">hexdec</span>(<span style="color: #008080;">substr</span>(<span style="color: #800080;">$this</span>->code_content_color, 5,2<span style="color: #000000;">))));
</span><span style="color: #008080;">47</span>             <span style="color: #008000;">//</span><span style="color: #008000;">画布中插入像素点</span>
<span style="color: #008080;">48</span>             <span style="color: #800080;">$this</span>-><span style="color: #000000;">get_pix();
</span><span style="color: #008080;">49</span>             <span style="color: #008000;">//</span><span style="color: #008000;">画布中插入直线</span>
<span style="color: #008080;">50</span>             <span style="color: #800080;">$this</span>-><span style="color: #000000;">get_line();
</span><span style="color: #008080;">51</span>             <span style="color: #008000;">//</span><span style="color: #008000;">画布显示</span>
<span style="color: #008080;">52</span>             <span style="color: #008080;">header</span>('Content-type:image/png'<span style="color: #000000;">);
</span><span style="color: #008080;">53</span>             imagepng(<span style="color: #800080;">$this</span>-><span style="color: #000000;">img);
</span><span style="color: #008080;">54</span> <span style="color: #000000;">        }
</span><span style="color: #008080;">55</span>         <span style="color: #008000;">//</span><span style="color: #008000;">生成验证码</span>
<span style="color: #008080;">56</span>         <span style="color: #0000ff;">private</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> get_code(){
</span><span style="color: #008080;">57</span>             <span style="color: #800080;">$str_content_len</span> = <span style="color: #008080;">strlen</span>(<span style="color: #800080;">$this</span>-><span style="color: #000000;">str_content);
</span><span style="color: #008080;">58</span>             <span style="color: #0000ff;">for</span>(<span style="color: #800080;">$i</span>=0;<span style="color: #800080;">$i</span><4;<span style="color: #800080;">$i</span>++<span style="color: #000000;">){
</span><span style="color: #008080;">59</span>                 <span style="color: #800080;">$this</span>->code_content .= <span style="color: #008080;">substr</span>(<span style="color: #800080;">$this</span>->str_content, <span style="color: #008080;">mt_rand</span>(0,<span style="color: #800080;">$str_content_len</span>-1),1<span style="color: #000000;">);
</span><span style="color: #008080;">60</span> <span style="color: #000000;">            }
</span><span style="color: #008080;">61</span> <span style="color: #000000;">        }
</span><span style="color: #008080;">62</span>         <span style="color: #008000;">//</span><span style="color: #008000;">生成像素点</span>
<span style="color: #008080;">63</span>         <span style="color: #0000ff;">private</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> get_pix(){
</span><span style="color: #008080;">64</span>             <span style="color: #0000ff;">for</span>(<span style="color: #800080;">$j</span>=0;<span style="color: #800080;">$j</span><300;<span style="color: #800080;">$j</span>++<span style="color: #000000;">){
</span><span style="color: #008080;">65</span>                 <span style="color: #800080;">$image_pix</span> .= imagesetpixel(<span style="color: #800080;">$this</span>->img, <span style="color: #008080;">mt_rand</span>(0,<span style="color: #800080;">$this</span>->img_width), <span style="color: #008080;">mt_rand</span>(0,<span style="color: #800080;">$this</span>->img_height), imagecolorallocate(<span style="color: #800080;">$this</span>->img, <span style="color: #008080;">mt_rand</span>(0,255), <span style="color: #008080;">mt_rand</span>(0,255), <span style="color: #008080;">mt_rand</span>(0,255<span style="color: #000000;">)));
</span><span style="color: #008080;">66</span> <span style="color: #000000;">            }
</span><span style="color: #008080;">67</span>             <span style="color: #0000ff;">return</span> <span style="color: #800080;">$image_pix</span><span style="color: #000000;">;
</span><span style="color: #008080;">68</span> <span style="color: #000000;">        }
</span><span style="color: #008080;">69</span>         <span style="color: #008000;">//</span><span style="color: #008000;">生成直线</span>
<span style="color: #008080;">70</span>         <span style="color: #0000ff;">private</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> get_line(){
</span><span style="color: #008080;">71</span>             <span style="color: #0000ff;">for</span>(<span style="color: #800080;">$l</span>=0;<span style="color: #800080;">$l</span><2;<span style="color: #800080;">$l</span>++<span style="color: #000000;">){
</span><span style="color: #008080;">72</span>                 <span style="color: #800080;">$img_line</span> .= imageline(<span style="color: #800080;">$this</span>->img, <span style="color: #008080;">mt_rand</span>(0,<span style="color: #800080;">$this</span>->img_width), <span style="color: #008080;">mt_rand</span>(0,<span style="color: #800080;">$this</span>->img_height), <span style="color: #008080;">mt_rand</span>(0,<span style="color: #800080;">$this</span>->img_width), <span style="color: #008080;">mt_rand</span>(0,<span style="color: #800080;">$this</span>->img_height), imagecolorallocate(<span style="color: #800080;">$this</span>->img, <span style="color: #008080;">mt_rand</span>(0,255), <span style="color: #008080;">mt_rand</span>(0,255), <span style="color: #008080;">mt_rand</span>(0,255<span style="color: #000000;">)));
</span><span style="color: #008080;">73</span> <span style="color: #000000;">            }
</span><span style="color: #008080;">74</span>             <span style="color: #0000ff;">return</span> <span style="color: #800080;">$img_line</span><span style="color: #000000;">;
</span><span style="color: #008080;">75</span> <span style="color: #000000;">        }
</span><span style="color: #008080;">76</span>         <span style="color: #008000;">//</span><span style="color: #008000;">session存储验证码</span>
<span style="color: #008080;">77</span>         <span style="color: #0000ff;">private</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> session_code(){
</span><span style="color: #008080;">78</span>             <span style="color: #008080;">session_start</span><span style="color: #000000;">();
</span><span style="color: #008080;">79</span>             <span style="color: #800080;">$_SESSION</span>['code'] = <span style="color: #800080;">$this</span>-><span style="color: #000000;">code_content;
</span><span style="color: #008080;">80</span> <span style="color: #000000;">        }
</span><span style="color: #008080;">81</span>         <span style="color: #008000;">//</span><span style="color: #008000;">判断程序是否支持GD库</span>
<span style="color: #008080;">82</span>         <span style="color: #0000ff;">private</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> gdcheck(){
</span><span style="color: #008080;">83</span>             <span style="color: #0000ff;">if</span>(<span style="color: #008080;">extension_loaded</span>('gd'<span style="color: #000000;">)){
</span><span style="color: #008080;">84</span>                 <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span><span style="color: #000000;">;
</span><span style="color: #008080;">85</span>             }<span style="color: #0000ff;">else</span><span style="color: #000000;">{
</span><span style="color: #008080;">86</span>                 <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #000000;">;
</span><span style="color: #008080;">87</span>                 <span style="color: #0000ff;">exit</span><span style="color: #000000;">();
</span><span style="color: #008080;">88</span> <span style="color: #000000;">            }
</span><span style="color: #008080;">89</span> <span style="color: #000000;">        }
</span><span style="color: #008080;">90</span>     }
Copy after login

3. Code in checkcode.php:

<?<span style="color: #000000;">php
</span><span style="color: #008000;">/*</span><span style="color: #008000;">*
 * @Description  网站登录/注册验证码生成类
 * @Author  赵一鸣
 * @OnlineDemo http://www.zymseo.com/demo/verificationcode/code.html
 * @Date  2016年10月6日
 </span><span style="color: #008000;">*/</span>
    <span style="color: #008080;">header</span>('Content-type:text/html;charset="utf-8"'<span style="color: #000000;">);
    </span><span style="color: #008080;">session_start</span><span style="color: #000000;">();
    </span><span style="color: #0000ff;">if</span>(<span style="color: #800080;">$_POST</span>['code']!=''<span style="color: #000000;">){
        </span><span style="color: #0000ff;">if</span>(<span style="color: #800080;">$_SESSION</span>['code']==<span style="color: #800080;">$_POST</span>['code'<span style="color: #000000;">]){
            </span><span style="color: #0000ff;">echo</span> '<span style="color: #000000;"><script type="text/javascript">
                    alert("验证码填写成功");
                    history.go(-1);
                </script>'<span style="color: #000000;">;
        }</span><span style="color: #0000ff;">else</span><span style="color: #000000;">{
            </span><span style="color: #0000ff;">echo</span> '<span style="color: #000000;"><script type="text/javascript">
                    alert("验证码填写失败");
                    history.go(-1);
                </script></span>'<span style="color: #000000;">;
        }
    }</span>
Copy after login

4. Code in showcode.php:

<span style="color: #008080;"> 1</span> <?<span style="color: #000000;">php
</span><span style="color: #008080;"> 2</span> <span style="color: #008000;">/*</span><span style="color: #008000;">*
</span><span style="color: #008080;"> 3</span> <span style="color: #008000;"> * @Description  网站登录/注册验证码生成类
</span><span style="color: #008080;"> 4</span> <span style="color: #008000;"> * @Author  赵一鸣
</span><span style="color: #008080;"> 5</span> <span style="color: #008000;"> * @OnlineDemo http://www.zymseo.com/demo/verificationcode/code.html
</span><span style="color: #008080;"> 6</span> <span style="color: #008000;"> * @Date  2016年10月6日
</span><span style="color: #008080;"> 7</span>  <span style="color: #008000;">*/</span>
<span style="color: #008080;"> 8</span>     <span style="color: #0000ff;">function</span> __autoload(<span style="color: #800080;">$classname</span><span style="color: #000000;">){
</span><span style="color: #008080;"> 9</span>         <span style="color: #0000ff;">include</span> <span style="color: #008080;">strtolower</span>(<span style="color: #800080;">$classname</span>).'.class.php'<span style="color: #000000;">;
</span><span style="color: #008080;">10</span> <span style="color: #000000;">    }
</span><span style="color: #008080;">11</span>     <span style="color: #008000;">//</span><span style="color: #008000;">定义验证码的取值范围</span>
<span style="color: #008080;">12</span>     <span style="color: #800080;">$str_content</span> = 'abcdefghijklmnopqrstuvwxyz0123456789'<span style="color: #000000;">;
</span><span style="color: #008080;">13</span>     <span style="color: #008000;">//</span><span style="color: #008000;">验证码文字颜色</span>
<span style="color: #008080;">14</span>     <span style="color: #800080;">$code_content_color</span> = '#ffffff'<span style="color: #000000;">;
</span><span style="color: #008080;">15</span>     <span style="color: #008000;">//</span><span style="color: #008000;">初始化对象</span>
<span style="color: #008080;">16</span>     <span style="color: #800080;">$code</span> = <span style="color: #0000ff;">new</span> Createcode(100,30,<span style="color: #800080;">$str_content</span>,<span style="color: #800080;">$code_content_color</span><span style="color: #000000;">);
</span><span style="color: #008080;">17</span>     <span style="color: #800080;">$code</span>->get_img();
Copy after login

Original address: http://www.zymseo.com/php/334.html

Please indicate the source when reprinting!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Recommendations
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template