使用php如何生成验证码

项目中经常会遇到一些登陆验证,支付验证等等一系列安全验证的策略。实现方法多种多样,下面就来讲解下如何用php生成简单的文字+数字组合的验证码:

所用语言php,gd库

原理解释:

a>实质上是在服务器端随机生成验证码,将其存储在$_SESSION中。

b>然后将验证码写在图片上,将图片发送至客户端,用户输入图片的上的验证码,递交给服务器。

c>服务端再与$_SESSION中存储的信息比对,一致则通过,否则不通过。

分为两步:

1)第一步服务器端生成验证码

2)客户端使用验证码

第一步:在服务器端如何生成验证码:<code.php>

<?php
session_start(); //1>session_start()必须置于最顶部,2>多服务器,要考虑集中管理session信息
 //phpinfo();//打印出php的信息
 //1.生成一张底图(width:100;height:30)
$image=imagecreatetruecolor(100,30);
$bgcolor=imagecolorallocate($image,255,255,255);//画笔着色
imagefill($image,0,0,$bgcolor);//将底图的着色

//随机生成四个数字
/*
for($i=0;$i<4;$i++){
    $fontcolor=imagecolorallocate($image,rand(0,120),rand(0,120),rand(0,120));
    $fontcontent=rand(0,9);//验证码的内容
    $fontsize=6;//字体大小
    $x=($i*100/4)+rand(5,10);//x轴
    $y=rand(5,10);//Y轴
    imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor);//使用imagestring()将文字写在画布上
}
*/
$captch_code="";
for($i=0;$i<4;$i++){
    $fontsize=6;
    $fontcolor=imagecolorallocate($image,rand(20,100),rand(30,100),rand(10,200));
    $str="abcdefghkmnpwsert1234567890";//给出一个字符串,用于生成随机验证码
    $fontcontent=substr($str,rand(0,strlen($str)),1);//每次截取一个字符
    $captch_code.=$fontcontent;//拼接
    $x=($i*100/4)+rand(5,10);
    $y=rand(5,10);
    imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor);
}
$_SESSION[‘authcode‘]=$captch_code;//保存在session中
//添加干扰点
for($i=0;$i<100;$i++){
    $pointcolor=imagecolorallocate($image,rand(50,200),rand(50,200),rand(50,200));
    imagesetpixel($image,rand(0,100),rand(0,30),$pointcolor);
}
//添加干扰线
for($i=0;$i<3;$i++){
    $linecolor=imagecolorallocate($image,rand(80,200),rand(80,200),rand(80,200));
    imageline($image,rand(5,95),rand(5,25),rand(5,95),rand(5,25),$linecolor);
}
header("content-type:".‘image/png‘);//输出图片的头文件固定格式(可以是image/jpg、image/png、)
imagepng($image);//向浏览器输出一张图片
imagedestroy($image);//销毁内存中的底图

//session_start

第二步:将生成的验证码图片返回给客户端<form.php>

<?php
header("Content-type:text/html;charset=utf-8");
if(isset($_REQUEST[‘authcode‘])){
    session_start();//使用$_SESSION之前必须使用session_start()
    if(strtolower($_REQUEST[‘authcode‘])==$_SESSION["authcode"]){//$_SESSION[‘authcode‘]是服务器端存储的验证码,$_REQUEST[‘authcode‘]获取客户端输入的信息
        echo "<font color=‘#000cc‘>输入正确</font>";
    }
    else{
        echo "<font color=‘#0000cc‘>输入错误</font>";
    }
    exit();
}
?>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>验证码正确</title>
    </head>
</html>
<body>
    <form action="./form.php">
        <p>验证码图片:
//点击验证码图片本身进行验证码的切换(需求一)
    //生成随机数字,便于访问服务端,如果地址是相同的则浏览器不会刷新访问
        <img id="captCode" src="./code.php?=<?php echo rand();?>" width="100px;height:100px;"
                 onclick="this.src=‘code.php?+ Math.random()‘">
//点击‘点击切换’,切换验证码(需求二)
            <img id="captCode" src="./code.php?=--><?php //echo rand();?><!--" width="100px;height:100px;" >
            <a href="javascript:void(0)" onclick="document.getElementById(‘captCode‘).src=‘code.php?=<?php echo rand();?>‘">点击切换?</a>
        </p>
        <p>请输入验证码的内容:
            <input type="text" name="authcode" value=""/>
        </p>
        <P>
            <input type="submit" value="提交" style="padding:6px 20px;"/>
        </P>
    </form>
</body>

  

  

  

时间: 2024-10-07 21:21:51

使用php如何生成验证码的相关文章

生成验证码总结

java生成验证码总结 1.serialVersionUID    private static final long serialVersionUID = -8501285780349046114L;    Java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的.相当于java类的身份证.主要用于版本控制. 2.BufferedImage类    --BufferedImage 子类描述具有可访问图像数据缓冲区的 Image.    TYPE_INT_RG

php图形图像处理之生成验证码

\(^o^)/~ 现在网上越来越离不开验证码了,不知道小伙伴们知不知利用php的GD库就可以生成验证码,Σ(⊙▽⊙"a ...... 首先介绍几个需要用的函数. 1.imagesetpixel() 这个函数可以进行像素点的绘制,在验证码中,我们称之为“噪点”,简直是一个神器.不知道小伙伴有没有想起来验证码上的点点呢,就是用这个函数生成的. 2.str_shuffle() 利用这个打乱字符串,然后利用substr()截取给定的位数,就可以生成一个随机字符串啦. 实例: 1 <?php 2 3

PHP 动态生成验证码

……机器人会在网站中搜寻允许他们插入广告的输入表单,在虚拟世界没有什么能阻挡它们胡作非为.这些机器人效率极高,完全不关心所攻击的表单的本来用途.它们唯一的目标就是用它们的垃圾广告覆盖你的内容,残忍地为它们的主人谋取广告收入. 要检验一个表单所面对的是一个真正的人,这种测试称为CAPTCHA(完全自动化公共图灵测试).目前最有效的方法是生成一个要求用户输入的随机通行短语,为了防止支持OCR(光学字符识别)的机器人破解系统,通行短语字母必须变形,或者用随机的直线和点进行部分模糊处理. /* 生成验证

javaweb学习总结(九)—— 通过Servlet生成验证码图片

一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下: 创建一个DrawImage Servlet,用来生成验证码图片 1 package gacl.response.study; 2 import java.awt.Color; 3 import java.awt.Font; 4 import java.awt.Graphics; 5 import java.awt.Graphics2D; 6 import java.awt.image.Buff

生成验证码效果

生成验证码效果    ValidateCode.java 验证码生成类 Java代码   package cn.dsna.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.io.IOException; impor

C#生成验证码

生成验证码的类: using System; using System.Collections.Generic; using System.Drawing; using System.Text; namespace Controllers.Core.Util { /// <summary> /// 验证码 /// </summary> public class VerifyCodeHelper : AdminBaseController { #region 变量 /// <s

asp.net一般处理程序(.ashx)动态生成验证码案例。

{使用一般处理程序动态生成验证码} 1.新建WebSite项目,添加一般处理程序命名为  yzm.ashx,添加如下代码: public void ProcessRequest(HttpContext context)    {   //将context.Response.ContentType = "text/plain";修改为context.Response.ContentType = "image/JPEG";        context.Response

用python生成验证码图片

除了配置好的python环境外,还需要配有python中的PIL库,这是python中专门用来处理图片的库.用传统的pip install 方法或者下载源码 python setup.py install 方法安装该库,很可能会报错(视运行环境不同).可以采用以下方法: 1.下载安装包URL:http://www.pythonware.com/products/pil/index.htm,要下载支持全平台的. 2.解压缩: tar –zxv –f Imaging-1.1.7.tar.gz 3.进

Web案例一:生成验证码

步骤: 具体代码实现: //第1步:创建一个BufferedImage对象,即图片对象 //定义图片的长和宽 int width = 200,height = 50; BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); //第2步:得到图片的画笔,强转成Graphics2D. Graphics2D pen = (Graphics2D) image.getGraphics(); /

Python Show-Me-the-Code 第 0010 题 生成验证码图片

第 0010 题:使用 Python 生成类似于下图中的字母验证码图片 阅读资料 思路:先随机生成验证码,然后用Python的PIL库画出这个激活码的图片,具体点就是创建画布,加验证码的字上去,增加噪点进行干扰,再进行模糊处理,接着保存到名字为验证码的图片中. 0010.生成验证码图片.py #!/usr/bin/env python #coding: utf-8 import Image, ImageDraw, ImageFont, ImageFilter import string, ran