加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php如何实现验证码

发布时间:2016-10-16 03:52:10 所属栏目:PHP教程 来源:PHP100中文网
导读:副标题#e# 验证码在表单实现越来越多了,但是用js的写的验证码,总觉得不方便,所以学习了下php实现的验证码。 验证码在表单实现越来越多了,但是用js的写的验证码,总觉得不方便,所以学习了下php实现的验证码。好吧,其实是没有事情干,但是又不想浪费时

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

  1. php 
  2.     //11>设置session,必须处于脚本最顶部 
  3.     session_start(); 
  4.  
  5.     //1>设置验证码图片大小的函数 
  6.     $image = imagecreatetruecolor(200, 60);         
  7.     //5>设置验证码颜色 imagecolorallocate(int im, int red, int green, int blue); 
  8.     $bgcolor = imagecolorallocate($image,255,255,255); //#ffffff 
  9.     //6>区域填充 int imagefill(int im, int x, int y, int col)  (x,y) 所在的区域着色,col 表示欲涂上的颜色 
  10.     imagefill($image, 0, 0, $bgcolor); 
  11.     //7>设置ttf字体 
  12.     $fontface = 'FZYTK.TTF'; 
  13.     //7>设置字库,实现简单的数字储备 
  14.     $str='天地不仁以万物为刍狗圣人不仁以百姓为刍狗这句经常出现在控诉暴君暴政上地残暴不仁把万物都当成低贱的猪狗来看待而那些高高在上的所谓圣人们也没两样还不是把我们老百姓也当成猪狗不如的东西但实在正取的解读是地不情感用事对万物一视同仁圣人不情感用事对百姓一视同仁执子之手与子偕老当男女主人公含情脉脉看着对方说了句执子之手与子偕老女方泪眼朦胧含羞地回一句讨厌啦这样的情节我们是不是见过很多但是我们来看看这句的原句死生契阔与子成说执子之手与子偕老于嗟阔兮不我活兮于嗟洵兮不我信兮意思是说战士之间的约定说要一起死现在和我约定的人都走了我怎么活啊赤裸裸的兄弟江湖战友友谊啊形容好基友的基情比男女之间的爱情要合适很多吧'; 
  15.     //str_split()切割字符串为一个数组,一个中文在utf_8为3个字符 
  16.     $strdb = str_split($str,3);     
  17.     //>11 
  18.     $captcha_code = ''; 
  19.     //8>生成随机的汉子 
  20.     for($i=0;$i<4;$i++){ 
  21.         //设置字体颜色,随机颜色 
  22.         $fontcolor = imagecolorallocate($image, rand(0,120),rand(0,120), rand(0,120));            //0-120深颜色 
  23.         //随机选取中文 
  24.         $in = rand(0,count($strdb)); 
  25.         $cn = $strdb[$in]; 
  26.         //将中文记录到将保存到session的字符串中 
  27.         $captcha_code .= $cn; 
  28.         /*imagettftext (resource $image ,float $size ,float $angle ,int $x ,int $y,int $color, 
  29.         string $fontfile ,string $text ) 幕布 ,尺寸,角度,坐标,颜色,字体路径,文本字符串 
  30.         mt_rand()生成更好的随机数,比rand()快四倍*/ 
  31.         imagettftext($image, mt_rand(20,24),mt_rand(-60,60),(40*$i+20),mt_rand(30,35),$fontcolor,$fontface,$cn); 
  32.     } 
  33.     //11>存到session 
  34.     $_SESSION['authcode'] = $captcha_code; 
  35.     //9>增加干扰元素,设置点 
  36.     for($i=0;$i<200;$i++){ 
  37.         //设置点的颜色,50-200颜色比数字浅,不干扰阅读 
  38.         $pointcolor = imagecolorallocate($image,rand(50,200), rand(50,200), rand(50,200));         
  39.         //imagesetpixel — 画一个单一像素 
  40.         imagesetpixel($image, rand(1,199), rand(1,59), $pointcolor); 
  41.     } 
  42.     //10>增加干扰元素,设置线 
  43.     for($i=0;$i<4;$i++){ 
  44.         //设置线的颜色 
  45.         $linecolor = imagecolorallocate($image,rand(80,220), rand(80,220),rand(80,220)); 
  46.         //设置线,两点一线 
  47.         imageline($image,rand(1,199), rand(1,59),rand(1,199), rand(1,59),$linecolor); 
  48.     } 
  49.  
  50.     //2>设置头部,image/png 
  51.     header('Content-Type: image/png'); 
  52.     //3>imagepng() 建立png图形函数 
  53.     imagepng($image); 
  54.     //4>imagedestroy() 结束图形函数  销毁$image 
  55.     imagedestroy($image); 

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

效果图如下:

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读