为了账号安全,请及时绑定邮箱和手机立即绑定

PHP实现验证码制作

标签:
PHP

captcha.php(PHP产生验证码并储存Session):


<?php   //开启Sessionsession_start();   //绘制底图$image = imagecreatetruecolor(100, 30);//返回资源型的值$bgcolor = imagecolorallocate($image, 255, 255, 255);//创建一个底图imagefill($image, 0, 0, $bgcolor);//区域填充   /*//输出随机数字for($i = 0; $i < 4; $i++){    $fontsize = 6;//字体大小    $fontcolor = imagecolorallocate($image, rand(0, 120), rand(0, 120), rand(0, 120));//字体颜色    $fontcontent = rand(0, 9);//字符串内容         $x = ($i*100/4) + rand(5, 10);//数字的横坐标    $y = rand(5, 10);//数字的纵坐标         imagestring($image, $fontsize, $x, $y, $fontcontent, $fontcolor);//在图像资源上绘制字符}*/   //产生随机字符串$captch_code '';for($i = 0; $i < 4; $i++){    $fontsize = 6;//字体大小    $fontcolor = imagecolorallocate($image, rand(0, 120), rand(0, 120),rand(0, 120));//字体颜色     $data '23456789ABCDEFGHJKLMNOPQRTUVWXYZabcdefghjkmnopqrtuvwxy';//随机字符串的字典    $fontcontent substr($data, rand(0, strlen($data)), 1);//字符    $captch_code .= $fontcontent;//拼接字符串         $x = ($i*100/4) + rand(5, 10);//字符横坐标    $y = rand(5, 10);//字符纵坐标         //在图像资源上绘制字符    imagestring($image$fontsize$x$y$fontcontent$fontcolor);}//将验证码字符串存储在Session$_SESSION['authcode'] = $captch_code;    //点干扰for($i = 0; $i < 200; $i++){    $pointcolor = imagecolorallocate($image, rand(50, 200), rand(50, 200), rand(50, 200));    imagesetpixel($image, rand(1, 99), rand(1, 99), $pointcolor);}   //线干扰for($i = 0; $i < 6; $i++){    $linecolor = imagecolorallocate($image, rand(80, 220), rand(80, 220), rand(80, 220));    imageline($image, rand(1, 99), rand(1, 99), rand(1, 99), rand(1, 99), $linecolor);}   //输出图片内容header('content-type:image/png');//输出内容的格式imagepng($image);//输出内容imagedestroy($image);//销毁资源     ?>




captcha-form.html(Web表单验证):


<!DOCTYPE html><html><head>  <meta charset="utf-8">  <title>验证码</title></head> <body>  <form method="post" action="./captcha-result.php">         <p>      验证码图片:      <img id="captcha-img" border="1" src="./captcha.php?r=0">      <a href="javascript:void(0);" onclick="getCaptchaImg();">看不清</a>    </p>         <p>请输入图片中的内容:<input id="authcode" type="text" name="authcode" value=""></p>         <p><input type="submit" value="提交" style="padding:6px 20px;"></p>     </form>   <script>    //动态获取验证码    function getCaptchaImg(){        //从服务器获取新的验证码        document.getElementById('captcha-img').src='./captcha.php?r='+Math.random();        //清空文本框里已输入的内容        document.getElementById('authcode').value="";    }  </script> </body></html>




captcha-result.php(PHP判断验证码是否正确):


<?php   //验证验证码是否正确if(isset($_REQUEST['authcode'])){    //开启Session    session_start();         //strtolower()将字符串都转换成小写,将验证码设置为不区分大小写型    if(strtolower($_REQUEST['authcode']) == strtolower($_SESSION['authcode'])){        echo "输入正确";    }else{        echo "输入错误";    }    exit();}   ?>




所用到的函数原型:


<?php   //imagecreatetruecolor() 返回一个图像标识符,代表了一幅大小为 x_size 和 y_size 的黑色图像。resource imagecreatetruecolor ( int $width , int $height );   //imagecolorallocate() 返回一个标识符,代表了由给定的 RGB 成分组成的颜色。red,green 和 blue 分别是所需要的颜色的红,绿,蓝成分。int imagecolorallocate ( resource $image , int $red , int $green , int $blue );   //imagefill() 在 image 图像的坐标 x,y(图像左上角为 0, 0)处用 color 颜色执行区域填充(即与 x, y 点颜色相同且相邻的点都会被填充)。bool imagefill ( resource $image , int $x , int $y , int $color );   //imagestring() 用 col 颜色将字符串 s 画到 image 所代表的图像的 x,y 坐标处(这是字符串左上角坐标,整幅图像的左上角为 0,0)。如果 font 是 1,2,3,4 或 5,则使用内置字体。bool imagestring ( resource $image , int $font , int $x , int $y , string $s , int $col );   //imagesetpixel() 在 image 图像中用 color 颜色在 x,y 坐标(图像左上角为 0,0)上画一个点。bool imagesetpixel ( resource $image , int $x , int $y , int $color );   //imageline() 用 color 颜色在图像 image 中从坐标 x1,y1 到 x2,y2(图像左上角为 0, 0)画一条线段。bool imageline ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $color );   //imagepng() 将 GD 图像流(image)以 PNG 格式输出到标准输出(通常为浏览器),或者如果用 filename 给出了文件名则将其输出到该文件。bool imagepng ( resource $image [, string $filename ] );   //imagedestroy() 释放与 image 关联的内存。image 是由图像创建函数返回的图像标识符,例如 imagecreatetruecolor()。bool imagedestroy ( resource $image );   ?>




点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
移动开发工程师
手记
粉丝
64
获赞与收藏
367

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消