千家信息网

php怎么实现获取验证码

发表于:2025-01-25 作者:千家信息网编辑
千家信息网最后更新 2025年01月25日,这篇文章给大家分享的是有关php怎么实现获取验证码的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。php实现获取验证码的方法:【
千家信息网最后更新 2025年01月25日php怎么实现获取验证码

这篇文章给大家分享的是有关php怎么实现获取验证码的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

php实现获取验证码的方法:【

本文操作环境:windows10系统、php 7、thinkpad t480电脑。

在日常生活中我们会经常使用到验证码功能,那么如果我们要自己实现一个验证码功能该如何去做呢?下面我们给出具体的实现代码,供大家参考!

如果你是一名初学者,那么我强烈建议你跟着代码中的注释一步步来,而不是直接复制代码。

新建一个captcha.php:

设置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

无标题文档

验证码: 换一个?

请输入验证码:

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

";      echo "_document.location=\"./form.php\"";      echo "";    }else{      //提示以及跳转页面      echo "";    }    exit();  }

显示页面如下:

数字加英文的验证码,只需更改captcha.php页面中的 7》即可,其他两个页面不需要动,代码如下:

设置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);

显示页面如下:

生成汉字类验证码,在运行过程中,提示乱码错误,无法显示,未能解决,代码如下:

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);

感谢各位的阅读!关于"php怎么实现获取验证码"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

0