php中怎么实现一个验证码功能,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
站在用户的角度思考问题,与客户深入沟通,找到蠡县网站设计与蠡县网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都网站设计、网站建设、企业官网、英文网站、手机端网站、网站推广、空间域名、网络空间、企业邮箱。业务覆盖蠡县地区。
新建一个captcha.php:
php //10>设置session,必须处于脚本最顶部 session_start(); $image = imagecreatetruecolor(100, 30); //1>设置验证码图片大小的函数 //5>设置验证码颜色 imagecolorallocate(int im, int red, int green, int blue); $bgcolor = imagecolorallocate($image,255,255,255); //#ffffff //6>区域填充 int imagefill(int im, int x, int y, int col) (x,y) 所在的区域着色,col 表示欲涂上的颜色 imagefill($image, 0, 0, $bgcolor); //10>设置变量 $captcha_code = ""; //7>生成随机数字 for($i=0;$i<4;$i++){ //设置字体大小 $fontsize = 6; //设置字体颜色,随机颜色 $fontcolor = imagecolorallocate($image, rand(0,120),rand(0,120), rand(0,120)); //0-120深颜色 //设置数字 $fontcontent = rand(0,9); //10>.=连续定义变量 $captcha_code .= $fontcontent; //设置坐标 $x = ($i*100/4)+rand(5,10); $y = rand(5,10); imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor); } //10>存到session $_SESSION['authcode'] = $captcha_code; //8>增加干扰元素,设置雪花点 for($i=0;$i<200;$i++){ //设置点的颜色,50-200颜色比数字浅,不干扰阅读 $pointcolor = imagecolorallocate($image,rand(50,200), rand(50,200), rand(50,200)); //imagesetpixel — 画一个单一像素 imagesetpixel($image, rand(1,99), rand(1,29), $pointcolor); } //9>增加干扰元素,设置横线 for($i=0;$i<4;$i++){ //设置线的颜色 $linecolor = imagecolorallocate($image,rand(80,220), rand(80,220),rand(80,220)); //设置线,两点一线 imageline($image,rand(1,99), rand(1,29),rand(1,99), rand(1,29),$linecolor); } //2>设置头部,image/png header('Content-Type: image/png'); //3>imagepng() 建立png图形函数 imagepng($image); //4>imagedestroy() 结束图形函数 销毁$image imagedestroy($image);
接着就是静态页的代码了:index.html
doctype html>
确认验证码title> </p></li><li><p> head> </p></li><li><p> <body> </p></li><li><p> <form method="post" action="./form.php"> </p></li><li><p> <p>验证码: <img id="captcha_img" border='1' src='./captcha.php?r=echo rand(); ?>' style="width:100px; height:30px" /> </p></li><li><p> <a href="javascript:void(0)" onclick="document.getElementById('captcha_img').src='./captcha.php?r='+Math.random()">换一个?a> </p></li><li><p> p> </p></li><li><p> <P>请输入验证码:<input type="text" name='authcode' value=''/>p> </p></li><li><p> <p><input type='submit' value='提交' style='padding:6px 5px;'/>p> </p></li><li><p> body> </p></li><li><p>html></p></li></ol></pre><p>从index.html可以看到,提交的表单是到form.php的,所以还要有一个判断的form.php代码:</p><pre><ol><li><p>php </p></li><li><p> header("Content-Type:text/html;charset=utf-8"); //设置头部信息 </p></li><li><p> //isset()检测变量是否设置 </p></li><li><p> if(isset($_REQUEST['authcode'])){ </p></li><li><p> session_start(); </p></li><li><p> //strtolower()小写函数 </p></li><li><p> if(strtolower($_REQUEST['authcode'])== $_SESSION['authcode']){ </p></li><li><p> //跳转页面 </p></li><li><p> echo "<script language=\"javascript\">"; </p></li><li><p> echo "document.location=\"./form.php\""; </p></li><li><p> echo "</script>"; </p></li><li><p> }else{ </p></li><li><p> //提示以及跳转页面 </p></li><li><p> echo "<script language=\"javascript\">"; </p></li><li><p> echo "alert('输入错误!');"; </p></li><li><p> echo "document.location=\"./form.php\""; </p></li><li><p> echo "</script>"; </p></li><li><p> } </p></li><li><p> exit(); </p></li><li><p> }</p></li></ol></pre><p>显示页面如下:</p><p><img src="https://s3.51cto.com/wyfs02/M02/73/7E/wKioL1X_tm-wec1TAAAelw9N7rA303.jpg" alt="php中怎么实现一个验证码功能"></p><p>那么,纯数字的实现了,数字加英文的也应该不难了。要修改的代码 只是在 captcha.php 将 //7>生成随机数字 修改成 //7>生成随机的字母和数字,如果你真的很可爱的就修改这几个字就认为可以实现的话,那么祝贺你,你永远保持快乐。脑残儿童欢乐多。</p><p>废话不多说了,拉代码吧。 </p><pre>php //10>设置session,必须处于脚本最顶部 session_start(); $image = imagecreatetruecolor(100, 30); //1>设置验证码图片大小的函数 //5>设置验证码颜色 imagecolorallocate(int im, int red, int green, int blue); $bgcolor = imagecolorallocate($image,255,255,255); //#ffffff //6>区域填充 int imagefill(int im, int x, int y, int col) (x,y) 所在的区域着色,col 表示欲涂上的颜色 imagefill($image, 0, 0, $bgcolor); //10>设置变量 $captcha_code = ""; //7>生成随机的字母和数字 for($i=0;$i<4;$i++){ //设置字体大小 $fontsize = 8; //设置字体颜色,随机颜色 $fontcolor = imagecolorallocate($image, rand(0,120),rand(0,120), rand(0,120)); //0-120深颜色 //设置需要随机取的值,去掉容易出错的值如0和o $data ='abcdefghigkmnpqrstuvwxy3456789'; //取出值,字符串截取方法 strlen获取字符串长度 $fontcontent = substr($data, rand(0,strlen($data)),1); //10>.=连续定义变量 $captcha_code .= $fontcontent; //设置坐标 $x = ($i*100/4)+rand(5,10); $y = rand(5,10); imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor); } //10>存到session $_SESSION['authcode'] = $captcha_code; //8>增加干扰元素,设置雪花点 for($i=0;$i<200;$i++){ //设置点的颜色,50-200颜色比数字浅,不干扰阅读 $pointcolor = imagecolorallocate($image,rand(50,200), rand(50,200), rand(50,200)); //imagesetpixel — 画一个单一像素 imagesetpixel($image, rand(1,99), rand(1,29), $pointcolor); } //9>增加干扰元素,设置横线 for($i=0;$i<4;$i++){ //设置线的颜色 $linecolor = imagecolorallocate($image,rand(80,220), rand(80,220),rand(80,220)); //设置线,两点一线 imageline($image,rand(1,99), rand(1,29),rand(1,99), rand(1,29),$linecolor); } //2>设置头部,image/png header('Content-Type: image/png'); //3>imagepng() 建立png图形函数 imagepng($image); //4>imagedestroy() 结束图形函数 销毁$image imagedestroy($image);</pre><p>其他的两个页面,不许要修改。</p><p><img src="https://s9.51cto.com/wyfs02/M01/73/7E/wKioL1X_tm_x2C1AAAAmc7ioFis464.jpg-wh_600x-s_169628322.jpg" alt="php中怎么实现一个验证码功能"></p><p>一般而言,现在就已经够用了。但是就像动漫一样,总会有番外。</p><p>那么,我们来个汉字的番外吧。其实我也准备将汉字的验证码放到我的毕业设计里面,虽然现在很流行滑动验证码,但是本人毕竟不是专门学习js的。</p><p>而且,还可以和答辩的老师说,我们验证码不需要素材,连图片也是生成的,用自己的知识装13,也没有设么的。 </p><pre>php //11>设置session,必须处于脚本最顶部 session_start(); //1>设置验证码图片大小的函数 $image = imagecreatetruecolor(200, 60); //5>设置验证码颜色 imagecolorallocate(int im, int red, int green, int blue); $bgcolor = imagecolorallocate($image,255,255,255); //#ffffff //6>区域填充 int imagefill(int im, int x, int y, int col) (x,y) 所在的区域着色,col 表示欲涂上的颜色 imagefill($image, 0, 0, $bgcolor); //7>设置ttf字体 $fontface = 'FZYTK.TTF'; //7>设置字库,实现简单的数字储备 $str='天地不仁以万物为刍狗圣人不仁以百姓为刍狗这句经常出现在控诉暴君暴政上地残暴不仁把万物都当成低贱的猪狗来看待而那些高高在上的所谓圣人们也没两样还不是把我们老百姓也当成猪狗不如的东西但实在正取的解读是地不情感用事对万物一视同仁圣人不情感用事对百姓一视同仁执子之手与子偕老当男女主人公含情脉脉看着对方说了句执子之手与子偕老女方泪眼朦胧含羞地回一句讨厌啦这样的情节我们是不是见过很多但是我们来看看这句的原句死生契阔与子成说执子之手与子偕老于嗟阔兮不我活兮于嗟洵兮不我信兮意思是说战士之间的约定说要一起死现在和我约定的人都走了我怎么活啊赤裸裸的兄弟江湖战友友谊啊形容好基友的基情比男女之间的爱情要合适很多吧'; //str_split()切割字符串为一个数组,一个中文在utf_8为3个字符 $strdb = str_split($str,3); //>11 $captcha_code = ''; //8>生成随机的汉子 for($i=0;$i<4;$i++){ //设置字体颜色,随机颜色 $fontcolor = imagecolorallocate($image, rand(0,120),rand(0,120), rand(0,120)); //0-120深颜色 //随机选取中文 $in = rand(0,count($strdb)); $cn = $strdb[$in]; //将中文记录到将保存到session的字符串中 $captcha_code .= $cn; /*imagettftext (resource $image ,float $size ,float $angle ,int $x ,int $y,int $color, string $fontfile ,string $text ) 幕布 ,尺寸,角度,坐标,颜色,字体路径,文本字符串 mt_rand()生成更好的随机数,比rand()快四倍*/ imagettftext($image, mt_rand(20,24),mt_rand(-60,60),(40*$i+20),mt_rand(30,35),$fontcolor,$fontface,$cn); } //11>存到session $_SESSION['authcode'] = $captcha_code; //9>增加干扰元素,设置点 for($i=0;$i<200;$i++){ //设置点的颜色,50-200颜色比数字浅,不干扰阅读 $pointcolor = imagecolorallocate($image,rand(50,200), rand(50,200), rand(50,200)); //imagesetpixel — 画一个单一像素 imagesetpixel($image, rand(1,199), rand(1,59), $pointcolor); } //10>增加干扰元素,设置线 for($i=0;$i<4;$i++){ //设置线的颜色 $linecolor = imagecolorallocate($image,rand(80,220), rand(80,220),rand(80,220)); //设置线,两点一线 imageline($image,rand(1,199), rand(1,59),rand(1,199), rand(1,59),$linecolor); } //2>设置头部,image/png header('Content-Type: image/png'); //3>imagepng() 建立png图形函数 imagepng($image); //4>imagedestroy() 结束图形函数 销毁$image imagedestroy($image);</pre><p>其他的页面也是不需要修改的。</p><p>效果图如下:</p><p><img src="/upload/otherpic51/444408.jpg" alt="php中怎么实现一个验证码功能"></p><p>看完上述内容,你们掌握php中怎么实现一个验证码功能的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注创新互联行业资讯频道,感谢各位的阅读!</p> <br> 网站题目:php中怎么实现一个验证码功能 <br> 网页地址:<a href="http://gydahua.com/article/gciope.html">http://gydahua.com/article/gciope.html</a> </div> <div class="view-qrocde cl"> <div class="m z"><img src="/Public/Home/images/ew.jpg"/></div> <div class="text"> <h6>扫二维码与项目经理沟通</h6> <p>我们在微信上24小时期待你的声音</p> <p>解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流</p> </div> </div> <div class="othernews cl"> <h3>其他资讯</h3> <ul> <li><a href="/article/jgpchj.html">如何使用pythonGenomeTracks可视化hi-c数据</a></li><li><a href="/article/jgpchi.html">Docker安装Redis的方法</a></li><li><a href="/article/jgpssj.html">layui绑定formsubmit提交表单的注意事项有哪些</a></li><li><a href="/article/jgpsop.html">css中如何使用Text-transform和FontVariant属性</a></li><li><a href="/article/jgpdpg.html">informix初始化</a></li> </ul> </div> </div> </div> <div class="sidebar"> <div class="tuijian"> <a href="#"> <h2 class="cl"><span>行业动态</span></h2> <h3>企业网站建设的重要性!</h3> <p>现在虽然是移动互联网时代,但企业网站依然重要,包含PC站点,移动站。可以说企业网站关系企业的未来发展和前途,尤其对中小企业更是如此,一些中小企业老板,对自己的名片很在乎,因为这是个门面。...</p> </a> </div> <div class="ser sidesub"> <h2>服务项目</h2> <ul class="ebox"> <li class="sub sub-1"> <div> <h3>网站建设</h3> <p></p> <a class="btn" href="/serve/website/">查看详情</a> </div> </li> <li class="sub sub-1"> <div> <h3>移动端/APP</h3> <p></p> <a class="btn" href="/serve/moblie/">查看详情</a> </div> </li> <li class="sub sub-1"> <div> <h3>微信/小程序</h3> <p></p> <a class="btn" href="/serve/small/">查看详情</a> </div> </li> <li class="sub sub-1"> <div> <h3>技术支持</h3> <p></p> <a class="btn" href="/serve/tech/">查看详情</a> </div> </li> <li class="sub sub-1"> <div> <h3>其它服务</h3> <p></p> <a class="btn" href="/serve/othe/">查看详情</a> </div> </li> <li class="sub sub-5"> <div> <h3>更多服务项目</h3> <p> <a>用我们的专业和诚信赢得您的信赖,从PC到移动互联网均有您想要的服务!</a></p> <a class="btn" href="/serve/">获取更多</a> </div> </li> </ul> </div> <div class="contact" id="fix"> <h2 class="cl"> <span>联系吧</span> <a href="https://map.baidu.com/" class="ditu" rel="nofollow" target="_blank">在百度地图上找到我们</a> </h2> <h3>电话:13518219792</h3> <p>如遇占线或暂未接听请拨:136xxx98888</p> <div class="qq"> <a href="//wpa.qq.com/msgrd?v=3&uin=244261566&site=qq&menu=yes" rel="nofollow" target="_blank">业务咨询</a> <a href="//wpa.qq.com/msgrd?v=3&uin=244261566&site=qq&menu=yes" rel="nofollow" target="_blank">技术咨询</a> <a href="//wpa.qq.com/msgrd?v=3&uin=244261566&site=qq&menu=yes" rel="nofollow" target="_blank">售后服务</a> </div> </div> </div> <script> //固定滚动 (function () { var oDiv = document.getElementById("fix"); var H = 120, iE6; var Y = oDiv; while (Y) { H += Y.offsetTop; Y = Y.offsetParent }; iE6 = window.ActiveXObject && !window.XMLHttpRequest; if (!iE6) { window.onscroll = function () { var s = document.body.scrollTop || document.documentElement.scrollTop; if (s > H) { oDiv.className = "contact fixed"; if (iE6) { oDiv.style.top = (s - H) + "px"; } } else { oDiv.className = "contact "; } }; } })(); </script> </div> <div class="footer"> <div class="wp"> <div class="wpss cl"> <dl class="about"> <dt>网站设计</dt> <dd><a href="http://chengdu.kswjz.com/" target="_blank" title="成都网站设计">成都网站设计</a></dd><dd><a href="http://www.kswcd.cn/" target="_blank" title="专业网站设计">专业网站设计</a></dd><dd><a href="http://www.cdxwcx.cn/sheji/" target="_blank" title="企业网站设计">企业网站设计</a></dd><dd><a href="https://www.cdxwcx.com/" target="_blank" title="成都网站设计">成都网站设计</a></dd> </dl> <dl class="about"> <dt>网站制作</dt> <dd><a href="http://www.cqcxhl.com/" target="_blank" title="重庆网站制作">重庆网站制作</a></dd><dd><a href="http://www.dzwzjz.com/" target="_blank" title="达州网站制作">达州网站制作</a></dd><dd><a href="http://www.kswcd.com/mobile/" target="_blank" title="手机网站制作">手机网站制作</a></dd><dd><a href="https://www.cdxwcx.com/wangzhan/mbqiye.html" target="_blank" title="成都企业网站制作">成都企业网站制作</a></dd> </dl> <dl class="contact"> <dt>联系我们</dt> <dd>电话:13518219792</dd> <dd>邮箱:631063699@qq.com</dd> <dd>地址:成都青羊区锦天国际1002号</dd> <dd>网址:www.gydahua.com</dd> </dl> <dl class="about" style="margin-left:50px;width:235px;"> <dt>网站建设</dt> <dd><a href="http://www.cxhlcq.com/" target="_blank" title="重庆网站建设">重庆网站建设</a></dd><dd><a href="http://www.xdwzjz.cn/" target="_blank" title="新都网站建设">新都网站建设</a></dd><dd><a href="https://www.cdxwcx.com/" target="_blank" title="成都网站建设">成都网站建设</a></dd><dd><a href="https://www.cdxwcx.com/city/dujiangyan/" target="_blank" title="都江堰网站建设">都江堰网站建设</a></dd> <!--成都网站建设 成都网站制作 成都做网站 网站建设公司--> </dl> <dl class="flow"> <dt></dt> <div class="ma cl"> <div class="m"> <img src="/Public/Home/images/ew.jpg" /> <p>微信二维码</p> </div> </div> </dl> </div> </div> <div class="footer-link wp"> <ul class="wpss cl"> <li class="fisrt">友情链接</li> <li><a href="http://www.jywzsj.com/" title="jywzsj.com" target="_blank">jywzsj.com</a></li><li><a href="http://www.cdxwcx.cn/tuoguan/ershu.html" title="中国电信成都枢纽中心" target="_blank">中国电信成都枢纽中心</a></li><li><a href="http://www.nzjixie.com/" title="成都户外广告牌" target="_blank">成都户外广告牌</a></li><li><a href="http://www.cdkjz.cn/wangzhan/menhu/" title="成都门户网站建设" target="_blank">成都门户网站建设</a></li><li><a href="http://www.typanxi.com/" title="店铺招牌设计" target="_blank">店铺招牌设计</a></li><li><a href="http://www.ysfsjgs.com/" title="书籍刊物设计" target="_blank">书籍刊物设计</a></li><li><a href="https://www.xwcx.net/hkcloud.html" title="香港云服务器租用" target="_blank">香港云服务器租用</a></li><li><a href="http://www.cdhcym.com/" title="甲醛检测" target="_blank">甲醛检测</a></li><li><a href="http://www.csruizhi.cn/" title="csruizhi.cn" target="_blank">csruizhi.cn</a></li><li><a href="http://www.yuzhoubg.com/" title="成都楼顶广告牌" target="_blank">成都楼顶广告牌</a></li> </ul> </div> </div> <div class="bot-footer"> <div class="wp"> <p class="wpss"> <em>Copyright © 2002-2023 www.gydahua.com 快上网建站品牌 QQ:244261566 版权所有</em> <em>备案号:<a href="http://beian.miit.gov.cn/" rel="external nofollow">蜀ICP备19037934号</a></em> </p> <p class="wpss" style="line-height:30px !important;"> </p> </div> </div> <div class="footer-kefu"> <ul> <li class="qq"><a href="https://wpa.qq.com/msgrd?v=3&uin=244261566&site=qq&menu=yes"><em></em>在线咨询</a> </li> <li class="tel"><a href="tel:13518219792" target="_blank"><em></em>13518219792</a></li> <li class="wx"> <em></em> <div class="code"> <img src="/Public/Home/images/ew.jpg" /> <p>微信二维码</p> </div> </li> <li class="m"> <em></em> <div class="code"> <img src="/Public/Home/images/ew.jpg" /> <p>移动版官网</p> </div> </li> <li class="top"><em></em></li> </ul> </div> <script src="/Public/Home/js/all.js"></script> </body> </html> <script> $(".cont img").each(function(){ var src = $(this).attr("src"); //获取图片地址 var str=new RegExp("http"); var result=str.test(src); if(result==false){ var url = "https://www.cdcxhl.com"+src; //绝对路径 $(this).attr("src",url); } }); window.onload=function(){ document.oncontextmenu=function(){ return false; } } </script>