php实现验证码

news/2024/11/17 21:28:04/

 

\
验证码在表单实现越来越多了,但是用js的写的验证码,总觉得不方便,所以学习了下php实现的验证码。好吧,其实是没有事情干,但是又不想浪费时间,所以学习了下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/pngheader('Content-Type: image/png');//3>imagepng() 建立png图形函数imagepng($image);//4>imagedestroy() 结束图形函数  销毁$imageimagedestroy($image);
复制代码

  接着就是静态页的代码了:index.html

  

复制代码
<!doctype html>
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>确认验证码title></head><body><form method="post" action="./form.php"><p>验证码: <img id="captcha_img" border='1' src='./captcha.php?r=echo rand(); ?>' style="width:100px; height:30px" /><a href="javascript:void(0)" οnclick="document.getElementById('captcha_img').src='./captcha.php?r='+Math.random()">换一个</a></p><P>请输入验证码:<input type="text" name='authcode' value=''/></p><p><input type='submit' value='提交' style='padding:6px 5px;'/></p>    </body>
</html>
复制代码

  从index.html可以看到,提交的表单是到form.php的,所以还要有一个判断的form.php代码:

复制代码
phpheader("Content-Type:text/html;charset=utf-8");            //设置头部信息//isset()检测变量是否设置if(isset($_REQUEST['authcode'])){session_start();//strtolower()小写函数if(strtolower($_REQUEST['authcode'])== $_SESSION['authcode']){//跳转页面echo "<script language=\"javascript\">";echo "document.location=\"./form.php\"";echo "</script>";}else{//提示以及跳转页面echo "<script language=\"javascript\">";echo "alert('输入错误!');";echo "document.location=\"./form.php\"";echo "</script>";}exit();}
复制代码

  显示页面如下:

\

  那么,纯数字的实现了,数字加英文的也应该不难了。要修改的代码   只是在 captcha.php 将 //7>生成随机数字 修改成  //7>生成随机的字母和数字,如果你真的很可爱的就修改这几个字就认为可以实现的话,那么祝贺你,你永远保持快乐。脑残儿童欢乐多。

  废话不多说了,拉代码吧。

  

复制代码
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/pngheader('Content-Type: image/png');//3>imagepng() 建立png图形函数imagepng($image);//4>imagedestroy() 结束图形函数  销毁$imageimagedestroy($image);
复制代码

  其他的两个页面,不许要修改。

  \

  一般而言,现在就已经够用了。但是就像动漫一样,总会有番外。

  那么,我们来个汉字的番外吧。其实我也准备将汉字的验证码放到我的毕业设计里面,虽然现在很流行滑动验证码,但是本人毕竟不是专门学习js的。

  而且,还可以和答辩的老师说,我们验证码不需要素材,连图片也是生成的,用自己的知识装13,也没有设么的。

  

复制代码
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/pngheader('Content-Type: image/png');//3>imagepng() 建立png图形函数imagepng($image);//4>imagedestroy() 结束图形函数  销毁$imageimagedestroy($image);
复制代码

  其他的页面也是不需要修改的。

  效果图如下:

\

 

转载于:https://www.cnblogs.com/iverson-3/p/5059881.html


http://www.ppmy.cn/news/475099.html

相关文章

php如何实现验证码

验证码在表单实现越来越多了&#xff0c;但是用js的写的验证码&#xff0c;总觉得不方便&#xff0c;所以学习了下php实现的验证码。好吧&#xff0c;其实是没有事情干&#xff0c;但是又不想浪费时间&#xff0c;所以学习了下php实现验证码。正所谓&#xff0c;技多不压身。而…

基于matlab使用自校准来适应阵列不确定性(附源码)

一、前言 此示例显示了基于约束优化过程的自校准过程。利用机会来源同时估计阵列形状的不确定性和来源方向。此示例需要优化工具箱。 理论上&#xff0c;可以设计一个完美的均匀线性阵列&#xff08;ULA&#xff09;来执行各种处理&#xff0c;例如波束成形或到达方向估计。通常…

软考知识点汇总

本篇文章为22年上半年软件设计师备考笔记 个人总结笔记&#xff0c;如有错误望包涵指正 计算机组成和结构 海明校验码 n个数据位&#xff0c;设k个校验位 2 k > n k 1 2^{k}>nk1 2k>nk1 整个编码系统中任意两个码字的最小距离就是该编码系统的码距。为了使一个系…

程序员必备软技能之科技趋势(一)

一、知识点 语音公司&#xff1a;搜狗、科大讯飞 美的&#xff1a;收购了全球领先的机器臂公司。 BTC、ETH、不支持ICO BTC跌其他货币也会跌&#xff0c;其他货币跌BTC不一定跌。心目中的第一货币。 商业机器人将逐渐代替工业机器人。&#xff08;泡茶、叠衣&#xff09; …

工作人员必备的计算机知识,工作必备计算机技巧知识

随着我们对电脑的使用&#xff0c;各式各样的软件应用被安装到电脑上&#xff0c;电脑开机时&#xff0c;你可能会感觉到电脑开机速度会变慢&#xff0c;其实这是一个很常见的问题。下面就让小编带你去看看工作必备计算机技巧知识吧&#xff0c;希望能帮助到大家! 电脑技巧|关闭…

网络推广必备知识

网络推广&#xff0c;怎么做?有些人已经出神入化了&#xff0c;而有些人还是摸不到头脑。 接触过很多客户&#xff0c;对网络推广倒是很认可&#xff0c;但就是不了解&#xff0c;认为做了一种方式&#xff0c;就全部都做了&#xff0c;其实不然。本篇文章就专门提供给刚入门的…

必备软技能总结

文章目录 定义好处举例倾听沟通自信项目时间管理团队合作体谅他人表示感激领导能力演说技巧业务知识 激活他人方法激活自己方法具体建议做兼职找不足积极谈不足有恒心说一些小故事诚实坦诚 什么是软技能&#xff1f;最重要的软技能有哪些&#xff1f;软技能列表1. 情商2. 沟通3…

r7 4800h和i7 10750h哪个好 锐龙r74800h和酷睿i710750h对比

参数对比 R7-4800H8核16线程&#xff0c;最高睿频4.2GHz&#xff0c;来自AMD公司。 i7-10750H6核12线程&#xff0c;最高睿频5.0Ghz&#xff0c;来自Intel公司。 选锐龙r74800h还是i710750h哪个好 这些点很重要!看完你就知道了 http://www.adiannao.cn/dy 游戏对比 根据一些游戏…