class ValidationCode

{

//属性

private $width;

private $height;

private $codeNum;

private $image;

private $disturbColorNum; //干扰元素数目

private $checkCode;

function __construct($width=80,$height=20,$codeNum=4)

{

$this->width=$width;

$this->height=$height;

$this->codeNum=$codeNum;

$number=floor($width*$height/15);

if($number>240-$codeNum)

{

$this->disturbColorNum=240-$codeNum;

}else

{

$this->disturbColorNum=$number;

}

$this->checkCode=$this->createCheckcode();

}

function getCheckCode()

{

return $this->checkCode;

}

private function createImage(){

$this->image=imagecreatetruecolor($this->width,$this->height);

$backcolor=imagecolorallocate($this->image,rand(225,255),rand(225,255),rand(255,255));

imagefill($this->image,0,0,$backcolor);

$border=imagecolorallocate($this->image,0,0,0);

imagerectangle($this->image,0,0,$this->width-1,$this->height-1,$border);

}

private function setDisturbColor(){

for($i=0;$idisturbColorNum;$i++){

$color=imagecolorallocate($this->image,rand(0,255),rand(0,255),rand(0,255));

imagesetpixel($this->image,rand(1,$this->width-2),rand(1,$this->height-2),$color);

}

for($i=0;$i<10;$i++)

{

$color=imagecolorallocate($this->image,rand(0,255),rand(0,255),rand(0,255));

imagearc($this->image,rand(-10,$this->width),rand(-10,$this->height),rand(30,300),rand(20,300),55,44,$color);

}

}

private function outputText($fontFace=""){

for($i=0;$icodeNum;$i++)

{

$fontcolor=imagecolorallocate($this->image,rand(0,128),rand(0,128),rand(0,128));

if($fontFace=="")

{

$fontsize=rand(3,5);

$x=floor($this->width/$this->codeNum)*$i+5;

$y=rand(0,$this->height-15);

imagechar($this->image,$fontsize,$x,$y,$this->checkCode{$i},$fontcolor);

}

else

{

$fontsize=rand(12,16);

$x=floor(($this->width-8)/$this->codeNum)*$i+8;

$y=rand($fontsize,$this->height-8);

imagettftext($this->image,$fontsize,rand(-45,45),$x,$y,$fontcolor,$fontFace,$this->checkCode{$i});

}

}

}

private function createCheckCode(){

$code="23456789abcdefghijkmnpqrstuvwrst";

$str="";

for($i=0;$icodeNum;$i++)

{

$char=$code{rand(0,strlen($code)-1)};

$str.=$char;

}

return $str;

}

private function outputImage()

{

if(imagetypes()&IMG_GIF)

{

header("Content-Type:image/gif");

imagepng($this->image);

}else if(imagetypes()&IMG_JPG)

{

header("Content-Type:image/jpeg");

imagepng($this->image);

}else if(imagetypes()&IMG_PNG)

{

header("Content-Type:image/png");

imagepng($this->image);

}else if(imagetypes()&IMG_WBMP){

header("Content-Type:image/vnd.wap.wbmp");

imagepng($this->image);

}else

{

die("PHP不支持图片验证码");

}

}

//通过该方法向浏览器输出图像

function showImage($fontFace="")

{

//创建图像背景

$this->createImage();

//设置干扰元素

$this->setDisturbColor();

//向图像中随机画出文本

$this->outputText($fontFace);

//输出图像

$this->outputImage();

}

function __destruct()

{

imagedestroy($this->image);

}

}

function checklogin(){

if(empty($_POST['name']))

die( '用户名不能为空');

if(empty($_POST['password']))

die("密码不能为空");

if($_SESSION['code']!=$_POST['vertify'])

die("验证码输入不正确".$_SESSION['code']);

$username=$_POST['name'];

$password=md5($_POST['password']);

//检查是否存在

conndb($username,$password);

}

function conndb($name="",$ps=""){

$conn=mysql_connect('localhost','root','123456');

if(!$conn) die("数据库连接失败".mysql_error());

mysql_select_db('5kan',$conn) or die('选择数据库失败'.mysql_error());

mysql_set_charset('utf8',$conn);

$sql="select id from k_user where username='{$name}' and password='{$ps}'";

$result=mysql_query($sql) or die("SQL语句错误".mysql_error());

if(mysql_num_rows($result)>0) die("登录成功");

else die("用户名或者密码错误");

mysql_close($conn);

}

session_start();

if(!isset($_POST['randnum']))

{

$code=new ValidationCode(120,20,4);

$code->showImage("comicbd.ttf"); //显示在页面

$_SESSION['code']=$code->getCheckCode();//保存在服务器中

}

else

{

checklogin();

}

?>

验证码生成php代码,一个php验证码生成类代码相关推荐

  1. 二调建设用地地类代码_二调地类代码

    0分 0 21.0KB 2017-09-17 认证考试aphza二调地类代码表. .~ ? 我们|打〈败〉了敌人. ?我们|[把敌人]打〈败〉了. 表A1 土地利用现状分类 一级类 二级类 含义 编码 ...

  2. android 界面代码,一个漂亮的app界面代码

    效果如下: device-2017-12-22-234223.png device-2017-12-22-234149.png 代码如下所示: xmlns:android="http://s ...

  3. [导入]创建一个ASP通用分页类代码部分

    <% '===================================================================== 'XDOWNPAGE   ASP版本 '版本  ...

  4. php 上传 类 代码,php 文件上传类代码

    /** * 文件上传类 */ class uploadFile { public $max_size = '1000000';//设置上传文件大小 public $file_name = 'date' ...

  5. 你绝对能看懂的Kafka源代码分析-RecordAccumulator类代码分析

    目录: <Kafka Producer设计分析> <KafkaProducer类代码分析> <RecordAccumulator类代码分析> <Sender类 ...

  6. 你绝对能看懂的Kafka源代码分析-KafkaConsumer类代码分析

    目录: <Kafka Producer设计分析> <KafkaProducer类代码分析> <RecordAccumulator类代码分析> <Sender类 ...

  7. php mysql 验证码代码_PHP_PHP 验证码的实现代码,checkcode.php 生成验证码图片, - phpStudy...

    PHP 验证码的实现代码 checkcode.php 生成验证码图片,还有变量 $_SESSION[check_pic]. 复制代码 代码如下: session_start(); for($i=0; ...

  8. python发票识别代码_python 发票验证码自动生成

    有的时候我们使用一些自动化脚本需要自动登录到一些网站做一些操作,提高工作的效率.但验证码是一个拦路虎,面对各种复杂的甚至连人都可能搞错的验证码,机器的自动识别往往变得异常艰难,与验证码的斗争使我们头疼 ...

  9. 动态生成能够局部刷新的验证码【AJAX技术】---看了不懂赔你钱

    在开发JavaWeb应用时,动态生成能够局部刷新的验证码是一项必须的功能,在这里我们将会详细的讲解如何实现这一功能. 一.涉及技术 该功能需要用到AJAX异步传输技术,这样能保证在点击"看不 ...

最新文章

  1. kafka-2.11-2.3.0版本配置文件参数详解_Kafka版本特性总结
  2. Directx 顶点和顶点缓存
  3. ORACLE11G RAC 在 centeros5.5 的安装日志
  4. uni开发中可以用table标签么_「uni-app 组件」t-table 表格
  5. 使用keras为什么accuracy一直为0_TensorFlow 2.0+Keras 防坑指南
  6. ----uni-app之APP更新及静默更新----
  7. 这些 iOS 面试基础题目,你都深入了解吗?
  8. 三维叉乘怎么算_奇技淫巧系列:向量叉乘
  9. 使用application对象实现网站访问量统计
  10. 百度富文本编辑器配置使用
  11. 《彼得·林奇的成功投资》书中的精髓:如何选择帮助我们实现资产翻10倍的股票?以及如何避开让我们血本无归的股票?
  12. 核心单词Word List 48
  13. github不再通过验证密码方式push代码
  14. 客户标签不能只是个“标签”
  15. 3dsMAX中R键的用法
  16. matlab基于傅立叶变换的时域或频域算法计算多普勒频移,展示代码
  17. 快速梳理23种常用的设计模式
  18. 高鹏清华计算机系,丁高鹏:强身健体为祖国健康工作五十年-清华大学新闻网...
  19. java农夫过河问题_农夫过河问题——C语言程序设计(转)
  20. 教你如何配置CISCO路由器

热门文章

  1. c# selenium chrome 文件下载_使用selenium从网站下载文件
  2. R语言中管道操作 %%, %T%, %$% 和 %%
  3. poj 1872 A Dicey Problem (bfs+WordFinal题)
  4. mac eclipse 安装lombok_别再写getter,setter方法了,用Lombok来简化你的代码吧
  5. 实现一个符合标准的Promise
  6. Vision GUI programming products
  7. Struts中ActionActionForm
  8. 浅析Windows计算机中丢失SETUPAPI.dll的问题
  9. 精简linux (二)背景图片的设置 网络功能的实现
  10. 第38周星期四电话会议忙碌的一天