php实现网页端验证码功能


Posted in PHP onJuly 11, 2017

我们在实际开发中,会用到短信验证码以及网页验证码,相对来说网页验证码的成本比较低,安全系数也还可以,接下来我们就来做一个网页端的验证码,直接上代码:

首先来说一下文件目录结构:

|----------phpyanzheng  项目文件夹

|----fonttype 文件夹放字体文件,字体文件一般以 .ttf和.otf结尾

|----1.php  里面放php语言代码

|----index.html  里面放网页布局

1.php

<?php
  header('content-type:image/jpeg');//定义一下代码以jpeg文件来解析
  $width = 120;//定义了图像的宽
  $height = 40;//定义了图像的高
  $element = array('q','w','e','r','t','y','u','i','o','p','l','k','j','h','g','f','d','s','a','z','x',
  'c','v','b','n','m','1','2','3','4','5','6','7','8','9','0','Q','W','E','R','T','Y','U','I','O','P','A'
  ,'S','D','F','G','H','J','K','L','M','N','B','V','C','X','Z');//定义一个显示文本的数组
  $string = '';
  for($i=0;$i<4;$i++){
    $string.=$element[rand(0,count($element)-1)];//随机产生四个文本目标
  }
  $img = imagecreatetruecolor($width, $height);//设置验证区宽高
  $colorBg = imagecolorallocate($img,rand(185,255),rand(185,255),rand(185,255));//产生200-255的随机数
  $colorBorder = imagecolorallocate($img,rand(50,100),rand(50,100),rand(50,100));//边框颜色
  $colorDian = imagecolorallocate($img,rand(0,100),rand(0,100),rand(0,100));//背景小点的颜色
  $colorLine = imagecolorallocate($img,rand(0,255),rand(0,255),rand(0,255));
  $colorString = imagecolorallocate($img,rand(20,80),rand(20,80),rand(20,80));
  imagefill($img, 0, 0, $colorBg);//设置位置和背景颜色
  imagerectangle($img,0,0,$width-1,$height-1,$colorBorder);//画一个边框
  for($i=0;$i<200;$i++){//循环出200个干扰点
    imagesetpixel($img, rand(0, $width-1), rand(0, $height-1), $colorDian);
  }
  for($i=0;$i<round(5);$i++){//循环出5条干扰线
    imageline($img,rand(0,$width/2),rand(0,$height/2),rand($width/2,$width),rand($height/2,$height),$colorLine);
  }
  //imagestring($img, 4, 0, 0,'a5dg', $colorString);
  
  imagettftext($img,25,rand(5, 15),rand(0,40),39,$colorString,'fonttype/PrincetownStd.otf',$string);
  //    图像名称  字体大小 倾斜角度 起始位置X轴 起始位置Y轴 颜色 字体位置 显示的内容
  imagejpeg($img);//输出图像
?>

index.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>孙三峰--验证码</title>
    <script type="text/javascript" src="js/jquery-1.1.0.js" ></script>
  </head>
  <body>
    <!--注意:原文中对应的ip地址是自己电脑端ip,如果不能正常运行,请修改ip-->
    <p>
      <label class="lbright">验证码:</label> 
      <span> 
        <input type="text" name="validcode" style="width:70px; vertical-align:middle;" id="validcode"/> 
        <img id="codePic" src="http://192.168.1.113:8601/PHP/phpyanzheng/1.php" width="120" height="40"/>          
      </span>         
      <span id="codePic" onclick="getPic();">看不清楚,换一张</span> <!---->
    </p>     
  </body>
  <script type="text/javascript"> 
     function getPic(){ 
         $("#codePic").attr("src","http://192.168.1.113:8601/PHP/phpyanzheng/1.php?flag="+Math.random()); <!--局部刷新--> 
     }; 
  </script>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHP模拟SQL Server的两个日期处理函数
Oct 09 PHP
深入密码加salt原理的分析
Jun 06 PHP
php 邮件发送问题解决
Mar 22 PHP
PHP页面实现定时跳转的方法
Oct 31 PHP
PHP实现事件机制的方法
Jul 10 PHP
thinkphp如何获取客户端IP
Nov 03 PHP
详解PHP使用日期时间处理器Carbon人性化显示时间
Aug 10 PHP
PHP多线程模拟实现秒杀抢单
Feb 07 PHP
PHP单例模式应用示例【多次连接数据库只实例化一次】
Dec 18 PHP
Laravel 对某一列进行筛选然后求和sum()的例子
Oct 10 PHP
解决laravel中日志权限莫名变成了root的问题
Oct 17 PHP
分享几种好用的PHP自定义加密函数(可逆/不可逆)
Sep 15 PHP
阿里云PHP SMS短信服务验证码发送方法
Jul 11 #PHP
PHP实现阿里大鱼短信验证的实例代码
Jul 10 #PHP
yii2局部关闭(开启)csrf的验证的实例代码
Jul 10 #PHP
PHP实现登陆并抓取微信列表中最新一组微信消息的方法
Jul 10 #PHP
PHP基于socket实现的简单客户端和服务端通讯功能示例
Jul 10 #PHP
PHP正则匹配操作简单示例【preg_match_all应用】
Jul 10 #PHP
php使用flock阻塞写入文件和非阻塞写入文件的实例讲解
Jul 10 #PHP
You might like
使用数据库保存session的方法
2006/10/09 PHP
一个显示某段时间内每个月的方法 返回由这些月份组成的数组
2012/05/16 PHP
Yii Framework框架获取分类下面的所有子类方法
2014/06/20 PHP
PHP程序中的文件锁、互斥锁、读写锁使用技巧解析
2016/03/21 PHP
Ajax执行顺序流程及回调问题分析
2012/12/10 Javascript
js离开或刷新页面检测(且兼容FF,IE,Chrome)
2014/03/05 Javascript
javascript面向对象程序设计(一)
2015/01/29 Javascript
jQuery实现图片上传和裁剪插件Croppie
2015/11/29 Javascript
WebGL利用FBO完成立方体贴图效果完整实例(附demo源码下载)
2016/01/26 Javascript
bootstrap modal弹出框的垂直居中
2016/12/14 Javascript
5种JavaScript脚本加载的方式
2017/01/16 Javascript
js 数字、字符串、布尔值的转换方法(必看)
2017/04/07 Javascript
vue 全选与反选的实现方法(无Bug 新手看过来)
2018/02/09 Javascript
jquery分页插件pagination使用教程
2018/10/23 jQuery
解决vue2 在mounted函数无法获取prop中的变量问题
2018/11/15 Javascript
vue中node_modules中第三方模块的修改使用详解
2019/05/31 Javascript
解决vue init webpack 下载依赖卡住不动的问题
2020/11/09 Javascript
关于angular 8.1使用过程中的一些记录
2020/11/25 Javascript
[38:41]2014 DOTA2国际邀请赛中国区预选赛 LGD VS CNB
2014/05/22 DOTA
python中实现迭代器(iterator)的方法示例
2017/01/19 Python
Python3中在Anaconda环境下安装basemap包
2018/10/21 Python
解决TensorFlow训练内存不断增长,进程被杀死问题
2020/02/05 Python
python实现word文档批量转成自定义格式的excel文档的思路及实例代码
2020/02/21 Python
详解pandas中iloc, loc和ix的区别和联系
2020/03/09 Python
python 字符串的驻留机制及优缺点
2020/06/19 Python
python多线程和多进程关系详解
2020/12/14 Python
Sperry官网:帆船鞋创始品牌
2016/09/07 全球购物
JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?
2015/10/22 面试题
会计岗位职责
2013/11/08 职场文书
会计职业生涯规划范文
2014/01/04 职场文书
交通志愿者活动总结
2014/06/27 职场文书
城市规划应届生推荐信
2014/09/08 职场文书
群众路线教育实践活动整改方案(个人版)
2014/10/25 职场文书
党支部培养考察意见
2015/06/02 职场文书
团队拓展训练感想
2015/08/07 职场文书
OpenFeign实现远程调用
2022/08/14 Java/Android