昨天学习了运用php的GD库进行验证码的实现。

首先可以用phpinfo()函数看一下GD库有没有安装,我用的wampserver是自动给安装的。

主要的步骤是:

1、生成验证码图片

2、随机生成字符,画到图片上,并把生成的字符追加到验证码字符串中

4、把验证码字符串保存到$_SESSION中

5、随机生成干扰元素

下面贴代码,注释比较详细:

 <?php
 session_start();
 $image_height = 30;
 $image_width = 100;
 $image = imagecreatetruecolor($image_width,$image_height);
 //验证码背景颜色
 $bgcolor = imagecolorallocate($image,255,245,255);
 //从左上角像验证码图片填充背景色
 imagefill($image,0,0,$bgcolor);
 //验证码字符串
 $captch_code ='';
 //生成字符
 for ($i = 0;$i<4;$i++){
 //  随机字符颜色
     $fontColor = imagecolorallocate($image,rand(0,120),rand(0,120),rand(0,120));
 //  字符数据库
     $data = 'abcdefghizklmnpqrstuvwxy0123456789';
 //  随机选取字符
     $fontContent = substr($data,rand(0,strlen($data))-1,1);
 //  追加到验证码字符串
     $captch_code.=$fontContent;
 //  随机生成字符位置
     $x = ($i*$image_width/4)+rand(0,$image_width/8);
     $y = rand(0,$image_height/2);
     //imagestring方法中默认字体为1-5
     $font = 5;
     imagestring($image,$font,$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(0,$image_width),rand(0,$image_height),$pointColor);
 }
 //画出干扰线
 for ($i=0;$i<3;$i++){
     $lineColor = imagecolorallocate($image,rand(80,220),rand(80,220),rand(80,220));
     imageline($image,rand(0,$image_width/2),rand(0,$image_height),rand($image_width/2,$image_width),rand(0,$image_height),$lineColor);
 }
 header('content-type:image/png');
 imagepng($image);
 imagedestroy($image);
 ?>

这样就实现了简单的验证码,当然还可对里边的字符进行扭曲的操作。

如果要实现中文的验证码在画字时要用到imagettftext($image, $size, $angle, $x, $y, $color, $fontfile, $text)这个函数,这里的$fontfile可以是支持中文的ttf字体的路径

php中运用GD库实现简单验证码的更多相关文章

  1. PHP 用session与gd库实现简单验证码生成与验证的类

    验证码是为了防止机器灌水给网站带来污染以及增加服务器负担而出现的.目前大大小小的网站都有验证码.今天自己实现了一个简单的验证码类.说简单是因为没有加一些干扰的弧线等等,只是将文字旋转了一下.当然,因为 ...

  2. php中GD库的简单使用

    在php中需要图像处理的地方GD库会发挥重要的作用,php可以创建并处理包括GIF,PNG,JPEG,WBMP以及XPM在内的多种图像格式,简单的举几个例子: 1.用GD库会创建一块空白图片,然后绘制 ...

  3. PHP5 GD库生成图形验证码(汉字)

    PHP5 GD库生成图形验证码且带有汉字的实例分享. 1,利用GD库函数生成图片,并在图片上写指定字符imagecreatetruecolor 新建一个真彩色图像imagecolorallocate ...

  4. PHP配置环境中开启GD库

    下配置好的PHP环境中,GD库不像windows那样可以直接用,而是默认关闭,需要把它打开,去到php.ini文件中 找到php_gd2.dll把分号去掉即可.(注:GD库跟绘制二维码等有关)

  5. 安装GD库解决ThinkPHP 验证码Call to undefined function Think\imagecreate()出错

    在php中imagecreate函数是一个图形处理函数,主要用于新建一个基于调色板的图像了,然后在这个基础上我们可以创建一些图形数字字符之类的,但这个函数需要GD库支持,如果没有开启GD库使用时会提示 ...

  6. 使用Pillow库 创建简单验证码

    使用Pillow生成简单的验证码 本想做成字体各自按随机角度倾斜, 但没有在Pillow中找到相关的方法 import randomfrom PIL import Image, ImageDraw, ...

  7. 基于GD库的php验证码类(支持中英文字体、背景、干扰点线、扭曲…….)

    转自:http://www.blhere.com/1168.html 12345678910111213141516171819202122232425262728293031323334353637 ...

  8. PHP中使用GD库方式画时钟

    <!--demo.html中内容--> <body> <img id="time" src="test.php" /> &l ...

  9. 关于PHP使用GD库生成的验证码无法在别处显示

    https://segmentfault.com/q/1010000002522270

随机推荐

  1. iOS开发 UITableView之cell

    1.cell简介 UITableView的每一行都是一个UITableViewCell,通过dataSource的tableView:cellForRowAtIndexPath:方法来初始化每一行 U ...

  2. Django 1.10中文文档—第一个Django应用Part1

    在本教程中,我们将引导您完成一个投票应用程序的创建,它包含下面两部分: 一个可以进行投票和查看结果的公开站点: 一个可以进行增删改查的后台admin管理界面: 我们假设你已经安装了Django.您可以 ...

  3. java记事本

    新知识点 1.撤销 textArea添加一个实现监听接口的类(添加了之后可以一直监视着添加的删除的情况,以便来撤销 textArea.getDocument().addUndoableEditList ...

  4. C语言的printf输出格式控制

    C语言的printf输出格式控制 printf大家都耳熟能详,但是能真正将其用法弄透的估计很少见. 转一篇,改天整理. 1.转换说明符 %a(%A)     浮点数.十六进制数字和p-(P-)记数法( ...

  5. 『重构--改善既有代码的设计』读书笔记----Replace Temp with Query

    Replace Temp with Query,顾名思义,表示你用查询来替换临时变量本身,临时变量对于函数来说是只有当前函数可见的,如果你在同类的别的地方要用到这个变量你就必须重新写表达式来获取这个变 ...

  6. 用webclient.DownloadFile下载exe文件时大小为0

    用自己写的下载软件从服务器端下载文件,别的文件能下,但exe文件显示下载文件大小为0,连接超时,原因是服务上发布的下载文件夹的虚拟目录的属性有问题, 包含.exe 文件的虚拟目录已启用执行应用程序权限 ...

  7. 编写可维护的javascript代码--- 2015.11.21(基本格式化)

    1.1 每行的编码需要控制在80字符. 1.2 改用:的地方必须用上. 1.3 缩进用2个制表符,不过4个也可以. 1.4 当代码一行显示不全需要折行显示,这里我暂且假定缩进为4个字符. 1.5 如果 ...

  8. C语言笔记(结构体与offsetof、container_of之前的关系)

    关于结构体学习,需要了解:结构体的定义和使用.内存对齐.结构体指针.得到结构体元素的偏移量(offsetof宏实现) 一.复习结构体的基本定义和使用 typedef struct mystruct { ...

  9. c语言里用结构体和指针函数实现面向对象思想

    一.基础研究 观察如下两个程序a.c和b.c: A.c: B.c: 这两个程序都是要实现在屏幕上第10行40列打印一个绿色的字符c: 这两个程序的数据组织方式是一样的,都是使用结构体,而且对共性和个性 ...

  10. moveToThread的最简单用法(依葫芦画瓢即可)(使得线程也更偏向于信号槽的使用方法)

    /*! * \file main.cpp * * Copyright (C) 2010, dbzhang800 * All rights reserved. * */ #include <QtC ...