PHP生成图片验证码demo【OOP面向对象版本】
下面是我今天下午用PHP写的一个生成图片验证码demo,仅供参考。
这个demo总共分为4个文件,具体代码如下:
1、code.html中的代码:
<span style="color: #008080;"> 1</span> <span style="color: #0000ff;"><span style="color: #ff00ff;">doctype html</span><span style="color: #0000ff;">></span> <span style="color: #008080;"> 2</span> <span style="color: #0000ff;"><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 style="color: #800000;">head</span><span style="color: #0000ff;">></span> <span style="color: #008080;"> 4</span> <span style="color: #0000ff;"><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 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 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 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 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 style="color: #800000;">br</span><span style="color: #0000ff;">/></span> <span style="color: #008080;">16</span> <span style="color: #0000ff;"><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 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 style="color: #800000;">br</span><span style="color: #0000ff;">/></span> <span style="color: #008080;">18</span> <span style="color: #0000ff;"><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></span></span></span></span></span></span></span></span></span></span></span></span></span>
Copier après la connexion
2、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>$i++<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>$j++<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>$l++<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> }
Copier après la connexion
3、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>'<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>
Copier après la connexion
4、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();
Copier après la connexion
原文地址:http://www.zymseo.com/php/334.html
转载请注明出处!
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines
By 尊渡假赌尊渡假赌尊渡假赌
Assassin's Creed Shadows: Solution d'énigmes de coquille
2 Il y a quelques semaines
By DDD
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines
By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
3 Il y a quelques semaines
By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)