php验证码实现代码(3种)_php实例

验证码在表单实现越来越多了,但是用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/png
 header('Content-Type: image/png');
 //3>imagepng() 建立png图形函数
 imagepng($image);
 //4>imagedestroy() 结束图形函数 销毁$image
 imagedestroy($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=<?php echo rand(); ?>' style="width:100px; height:30px" />
    <a href="javascript:void(0)" onclick="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代码:

<?php
  header("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();
  }

显示页面如下:

那么,纯数字的实现了,数字加英文的也应该不难了,废话不多说了,拉代码吧。

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

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

一般而言,现在就已经够用了。但是就像动漫一样,总会有番外。
那么,我们来个汉字的番外吧。其实我也准备将汉字的验证码放到我的毕业设计里面,虽然现在很流行滑动验证码,但是本人毕竟不是专门学习js的。

<?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实现的三种验证码:纯数字验证码,数字加英文验证码,还有一种汉字验证码,希望对大家熟练掌握php验证码有所帮助。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索验证码
, php生成验证码
, php验证码类
, php验证码代码
php验证码实例
php验证码代码实例、php 验证码 实例、java 代码实现验证码、php实现验证码、php实现短信验证码,以便于您获取更多的相关知识。

时间: 2024-09-19 09:09:19

php验证码实现代码(3种)_php实例的相关文章

PHP验证码函数代码(简单实用)_php实例

效果图: 复制代码 代码如下: <?php    /**  * vCode(m,n,x,y) m个数字  显示大小为n   边宽x   边高y  * micxp  *jb51.net */  session_start();    vCode(4, 15); //4个数字,显示大小为15  function vCode($num = 4, $size = 20, $width = 0, $height = 0) {       !$width && $width = $num * $

PHP开发中常用的十个代码样例_php实例

一.黑名单过滤 function is_spam($text, $file, $split = ':', $regex = false){ $handle = fopen($file, 'rb'); $contents = fread($handle, filesize($file)); fclose($handle); $lines = explode("n", $contents); $arr = array(); foreach($lines as $line){ list($w

微信支付PHP SDK —— 公众号支付代码详解_php实例

在微信支付 开发者文档页面 下载最新的 php SDK http://mch.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1 这里假设你已经申请完微信支付 1. 微信后台配置  如图 我们先进行测试,所以先把测试授权目录和 测试白名单添加上.测试授权目录是你要发起微信请求的哪个文件所在的目录. 例如jsapi 发起请求一般是jsapi.php所在目录 为测试目录,测试白名单即开发人员的微信号. 正式的支付授权目录不能和测试的一样否则会报错.不填

PHP图片验证码制作实现分享(全)_php实例

就如今天遇到随即函数rand();脑海中想到用它做点啥好呢,最后想起了验证码,数字验证码,字母验证码,中文验证码,可是自己不会呀,咋办呢,上网搜,看别人的代码,开不懂,看视频,听老师讲,将其中所遇到的函数,值得注意的地方都拿笔记下,平常看到一般网页上的随机验证码都是以一定的方框包围起来,貌似就是以图片为背景的.经过边看,自己边敲,虽然遇到很多不会的问题,但是我相信只要自己脚踏实地,一定学会的.现在想做一下总结,自己可能写的很乱,可我相信有一天会实现的.1.产生数字的随机数 -->创建图片-->

thinkPHP3.1验证码的简单实现方法_php实例

本文实例讲述了thinkPHP3.1验证码的简单实现方法.分享给大家供大家参考,具体如下: 代码中写: public function verify(){ import('ORG.Util.Image'); ob_clean(); Image::buildImageVerify(); } html中写: <img src='__APP__/Index/verify/' onClick="this.src=this.src+'?'+Math.random()" /> 就是说图

thinkPHP中验证码的简单使用方法_php实例

本文实例讲述了thinkPHP中验证码的简单使用方法.分享给大家供大家参考,具体如下: 首先生成验证码,在action文件中,直接调用thinkphp中提供的方法即可生成,确保开启php的扩展 gd2 如下: class UserAction Model extends Model { /** * 显示验证码信息 */ public function verify() { ob_clean(); // 清空(擦掉)输出缓冲区 ,也就是清空前面的输出,通常情况下验证码不显示,可考虑这个问题 imp

php语言中使用json的技巧及json的实现代码详解_php实例

目前,JSON已经成为最流行的数据交换格式之一,各大网站的API几乎都支持它. 我写过一篇<数据类型和JSON格式>,探讨它的设计思想.今天,我想总结一下PHP语言对它的支持,这是开发互联网应用程序(特别是编写API)必须了解的知识. 从5.2版本开始,PHP原生提供json_encode()和json_decode()函数,前者用于编码,后者用于解码. 一.json_encode() 该函数主要用来将数组和对象,转换为json格式.先看一个数组转换的例子: $arr = array ('a'

PHP验证码生成原理和实现_php实例

验证码在表单实现越来越多了,但是用js的写的验证码,总觉得不方便,所以学习了下php实现的验证码.好吧,其实是没有事情干,但是又不想浪费时间,所以学习了下php实现验证码.正所谓,技多不压身.而且,也可以封装成一个函数,以后使用的时候也是很方便的,当然现在未封装. 先给大家附上一张效果图: 由于注册的时候常常会用到注册码来防止机器恶意注册,这里我发表一个产生png图片验证码的基本图像,很简陋但思想很清晰: 1.产生一张png的图片 2.为图片设置背景色 3.设置字体颜色和样式 4.产生4位数的随

微信支付PHP SDK之微信公众号支付代码详解_php实例

这里假设你已经申请完微信支付 1. 微信后台配置  如图 我们先进行测试,所以先把测试授权目录和 测试白名单添加上.测试授权目录是你要发起微信请求的哪个文件所在的目录. 例如jsapi 发起请求一般是jsapi.php所在目录 为测试目录,测试白名单即开发人员的微信号. 正式的支付授权目录不能和测试的一样否则会报错.不填写或者填错授权目录以及测试白名单都会报错. 报错样例: NaNsystem:access_denied 不在测试白名单 2. 配置 lib/WxPay.Config.php文件

php 生成静态页面的办法与实现代码详细版_php实例

php中主要用到的就是要用到fread()和fwirte().而静态页面生成了之后,就会牵扯到修改的问题.这里可以用到正则匹配的方法来替换模版中改变的部位.不过此种方法太麻烦,值得推荐的方法是直接把原来生成的模版砍掉,重新生成,呵呵,真正的一了百了. 还需要说明的一点就是,这种生成静态页面的方法一般都用于那些变化不是很频繁的页面,比如信息的最终页面.而针对列表页,如果信息更新不是很频繁的话,也是可取的.现在网上流行好多可以生成静态页面的blog或者论坛程序,都是通过手动点击后台"生成html页&