PHP生成图片验证码练习笔记

windows系统GD库开启

将php.ini文件找到extension=php_gd2.dll  去掉前面的;就行了

linux系统GD库开启

##检测GD库是否安装命令
 php5 -m | grep -i gd
 或者
 php -i | grep -i --color gd
##如未安装GD库,则为服务器安装,方法如下
### 如果是源码安装,则加入参数
 --with-gd
### 如果是debian系的linux系统,用apt-get安装,如下
 apt-get install php5-gd
### 如果是CentOS系的系统,用yum安装,如下
 yum install php-gd
### 如果是suse系的linux系统,用yast安装,如下
 yast -i php5_gd

好了,php GD库己经好了下面我们来看php生成图形验证码图片实例

首先还是给大家先介绍一下验证码的简单概念吧!

1 、验证码介绍

验证码是将一串随机产生的数字或符号以图片的形式展现在页面上,由用户肉眼识别其中的验证码信息,在进行提交操作的同时,需将图片上的字符同时提交,输入提交验证成功后才能使用某项功能。如果提交的字符与服务器 session保存的不同,则认为提交信息无效。为了避免自动程序分析解析图片,通常会在图片上随机生成一些干扰素或者将字符进行扭曲,增加自动识别难度。用户提交后将用户输入的验证码与会话 sessi on中保存的字符串进行比对, 达到验证的效果。用户提交表单的时候,接收表单的页面检查服务端产生的 sessi on和客户端提交的表单值是否一致,不
一致则不读或写入数据库。会话 sessi on允许在服务器上储存小部分用户信息;这类信息是临时性的,当用户离开网站时会被自动删除。

2、 PHP实现过程
PHP网页文件被当作一般HTML网页文件来处理, 并且在编辑时,可以用编辑 HTML的常规方法来编写。由于PHP在使用时消耗相当少的系统资源, 并且有着开放的源代码, 而且是免费的,如今PHP已经被更多的网站应用,下面是 PHP实现验证码的过程:

(1)生成随机数
定义用来显示在图片上的数字和字母;

循环随机抽取四位定义好的字母和数字;
将通过数字得来的字符连起来一共是四位;
保存生成的数字和字母, 把生成好的随机数放到 sessi on变量中,将来跟用户提交的内容比较。

 代码如下 复制代码
< ? php
$ aut hnum_session = ' ; '
$ st r = a ' bcdef ghij k l mnopqrstuv wxyz 1234567890 '
;
$ l = strlen( $ str) ;
f or( $ i= 1 ; $ i< = 4 ; $ i+ + )
{
$ num= rand( 0 , $ l- 1);
$ aut hnum_session. = $ str[ $ num];$ aut hnum_session. = $ str[ $ num];
}
$ _SESSI ON[ " authnum_ses sion" ] ;
? >

(2) 创建图片
用图片创建函数确定所创建的图片大小。

 代码如下 复制代码
< ? php
$ i m = i magecreate( 60 , 20);
? >

(3)设置颜色
使用函数创建背景色;
使用函数创建字体色。

 代码如下 复制代码

< ? php
$ b lack = ImageColor A ll ocate( $ i m, 0 , 0, 0);
$ white = ImageColor A ll ocate( $ i m, 255 , 255 ,
255);
$ gray = I mageColor A ll ocate ( $ i m , 200 , 200 ,
200);
i magefill ( $ i m , 68 , 30 , $ gray);
$ li = I mageColor A l loca te ( $ i m , 220 , 220 ,
220);
? >

(4)加入干扰素
在不影响用户输入的条件下,加入若干干扰线、
干扰象素。

 代码如下 复制代码
< ? php
f or( $ i= 0 ; $ i< 3 ; $ i+ + )
{
i mageline( $ i m , rand ( 0 , 30), rand( 0 , 21), rand( 20 , 40), rand( 0 , 21), $ li );
}
f or( $ i= 0 ; $ i< 90 ; $ i+ + )
{
i magesetp i xe l ( $ i m, rand( )% 70 , rand( )% 30
, $ gray);
}
? >

(5)把字符写在图像左上角
使用函数 i magestri ng把字符写在图像上。

 代码如下 复制代码
< ? php
i magest ring( $ i m, 5 , 12 , 5 , $ au t hnu m _ ses2
sion , $ wh i te);
? >

(6)输出图像
开启 sessi on功能;
使用函数输出图像。

 代码如下 复制代码

< ? phpH eader( "Content - type : i mage /png" ) ;
sessi on_start ( ) ;
I magePNG( $ i m);
? >

上述验证码显示结果如下

 

在需要调用验证码进行验证的页面当中, 由用户填写验证码表单, 系统将表单提交的验证码数据与上面的 sessi on变量进行比对,若相等表示验证正确,可以继续进行; 不相等则错误, 终止用户正在进行的工作,实现用户使用验证码的验证功能。

无标题文档

 代码如下 复制代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<script language="javascript">
 function refresh_code()
 {
  form1.imgcode.src="verifycode.php?a="+Math.random();
 }
</script>
</head>
<body>
<form id="form1" name="form1" method="post" action="checkcode.php">
  <label for="code">验证码:</label>
  <input type="text" name="code" id="textfield" />
  <img id="imgcode" src="VerifyCode.php" alt="验证码" />
  <a href="javascript:refresh_code()">看不清?换一个</a>
  <input type="submit" name="button" id="button" value="提交" />
</form>
</body>
</html>

 

verifycode.php文件代码如下

 

 代码如下 复制代码

<?php
 /*
  图片验证码 Powered By KASON test http://www.111cn.net   */
  session_start();
  $num=4;//验证码个数
  $width=80;//验证码宽度
  $height=20;//验证码高度
  $code=' ';
  for($i=0;$i<$num;$i++)//生成验证码
  {
   switch(rand(0,2))
   {
    case 0:$code[$i]=chr(rand(48,57));break;//数字
    case 1:$code[$i]=chr(rand(65,90));break;//大写字母
    case 2:$code[$i]=chr(rand(97,122));break;//小写字母
   }
  }
  $_SESSION["VerifyCode"]=$code;
  $image=imagecreate($width,$height);
  imagecolorallocate($image,255,255,255);
  for($i=0;$i<80;$i++)//生成干扰像素
  {
   $dis_color=imagecolorallocate($image,rand(0,2555),rand(0,255),rand(0,255));
   imagesetpixel($image,rand(1,$width),rand(1,$height),$dis_color);
  }
  for($i=0;$i<$num;$i++)//打印字符到图像
  {
   $char_color=imagecolorallocate($image,rand(0,2555),rand(0,255),rand(0,255));
   imagechar($image,60,($width/$num)*$i,rand(0,5),$code[$i],$char_color);
  }
  header("Content-type:image/png");
  imagepng($image);//输出图像到浏览器
  imagedestroy($image);//释放资源
?>  

 

checkcode.php文件如下

 代码如下 复制代码

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php
ini_set('display_errors', 'Off');
session_start();
  if((strtoupper($_POST["code"])) == strtoupper(($_SESSION["VerifyCode"]))){
 print("验证码正确,");
  }else{
    print("验证码错误,");
  }
  echo "提交的验证码:".strtoupper($_POST["code"]).",正确的验证码:".strtoupper($_SESSION["VerifyCode"]);
?>

时间: 2024-10-15 13:43:37

PHP生成图片验证码练习笔记的相关文章

Java代码生成图片验证码实现

  介绍一个使用Java代码生成随机图片验证码的示例 可以直接配置成Servlet,在页面直接调用 Java代码随机生成图片验证码 package com.rchm.util.images; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.FileOutputStream; import java

asp 生成图片验证码

下面一款代码是一个用asp 生成图片验证码的程序哦,关于验证代码写程序的大多都会知道哦,下面来看看这款图片验证码的生成方式吧. <% Option Explicit Response.buffer=true NumCode Function NumCode()  Response.Expires = -1  Response.AddHeader "Pragma","no-cache"  Response.AddHeader "cache-ctrol&

python使用pil生成图片验证码的方法

  这篇文章主要介绍了python使用pil生成图片验证码的方法,涉及Python操作Image,ImageDraw,ImageFont等模块的相关技巧,需要的朋友可以参考下 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 5

java生成图片验证码实例代码_java

关于java图片验证码的文章最近更新了不少,帮助大家掌握java验证码的生成技术,下文为大家分享了java生成图片验证码最简单的方法,供大家参考. 现在各行业在定制系统时都会考虑到机器注册,现在最有效的方式就是输入验证.现在的验证方式有很多种: 一.问题验证,其实也是图片验证,在图片上生成问题,然后输入框输入答案. 二.图片验证,输入图片上展示的文字信息. 三.短信验证,比较繁杂,用户也不怎么喜欢. 四.还有就是百度最新的验证方式.图片上生成文字,然后出现一个文字点击框,选择你在验证图片上看到的

php生成图片验证码-附五种验证码_php实例

以前输出验证码的时候用过一个方法,在前台用JS生成验证码字符串,再传递到后台用PHP输出验证码图像.这样在验证时就不需要使用$_SESSION传递验证码的值,直接用JS比较生成的字符串和输入的字符串是否相等即可. 本文以实例演示5种验证码,并介绍生成验证码的函数.PHP生成验证码的原理:通过GD库,生成一张带验证码的图片,并将验证码保存在Session中. 1.HTML 5中验证码HTML代码如下: <div class="demo"> <h3>1.数字验证码&

php生成图片验证码的方法_php技巧

本文为大家分享了php生成图片验证码的方法,供大家参考,具体内容如下 首先从指定字符集合中随机抽取固定数目的字符,以一种不规则的方法画在画布上,再适当添加一些干扰点和干扰元素,最后将图片输出,一张崭新的验证码就完成了. 前端代码如下: <!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"&

Android自定义View绘制随机生成图片验证码_Android

本篇文章讲的是Android自定义View之随机生成图片验证码,开发中我们会经常需要随机生成图片验证码,但是这个是其次,主要还是想总结一些自定义View的开发过程以及一些需要注意的地方. 按照惯例先看看效果图: 一.先总结下自定义View的步骤: 1.自定义View的属性 2.在View的构造方法中获得我们自定义的属性 3.重写onMesure 4.重写onDraw 其中onMesure方法不一定要重写,但大部分情况下还是需要重写的 二.View 的几个构造函数 1.public CustomV

php生成图片验证码

  验证码在WEB应用中非常重要,通常用来防止用户恶意提交表单,如恶意注册和登录.论坛恶意灌水等.本文将通过实例讲解使用PHP生成常见的验证码 先给看下 大致的效果 那么接下来的就直接贴代码吧 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 <?php $image = imagecreatetruecolor(100, 30); //创建画布 $imagecolor = ima

Asp.net生成图片验证码类

asp.net|验证码 using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;using Syste