`

JSP彩色认证码

    博客分类:
  • Java
阅读更多
<%@ page contentType="image/jpeg" pageEncoding="gb2312"
import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*"%>
<%!Color getRandColor(int fc, int bc) {//给定范围获得随机颜色
    Random random = new Random();
    if (fc > 255)
     fc = 255;
    if (bc > 255)
     bc = 255;
    int r = fc + random.nextInt(bc - fc);
    int g = fc + random.nextInt(bc - fc);
    int b = fc + random.nextInt(bc - fc);
    return new Color(r, g, b);
}%>
<%
//设置页面不缓存
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);

// 在内存中创建图象
int width = 60, height = 20;
BufferedImage image = new BufferedImage(width, height,
     BufferedImage.TYPE_INT_RGB);

// 获取图形上下文
Graphics g = image.getGraphics();

//生成随机类
Random random = new Random();

// 设定背景色
g.setColor(getRandColor(200, 250));
g.fillRect(0, 0, width, height);

//设定字体
g.setFont(new Font("Times New Roman", Font.PLAIN, 18));

//画边框
//g.setColor(new Color());
//g.drawRect(0,0,width-1,height-1);

// 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
g.setColor(getRandColor(160, 200));
for (int i = 0; i < 155; i++) {
    int x = random.nextInt(width);
    int y = random.nextInt(height);
    int xl = random.nextInt(12);
    int yl = random.nextInt(12);
    g.drawLine(x, y, x + xl, y + yl);
}

// 取随机产生的认证码(4位数字)
String sRand = "";
for (int i = 0; i < 4; i++) {
    String rand = String.valueOf(random.nextInt(10));
    sRand += rand;
    // 将认证码显示到图象中
    g.setColor(new Color(20 + random.nextInt(110), 20 + random
    .nextInt(110), 20 + random.nextInt(110)));//调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
    g.drawString(rand, 13 * i + 6, 16);
}

// 将认证码存入SESSION
session.setAttribute("rand", sRand);

// 图象生效
g.dispose();

// 输出图象到页面
ImageIO.write(image, "JPEG", response.getOutputStream());

//加上下面两条代码,运行时才不会出现java.lang.IllegalStateException: getOutputStream() has already been called ..........等异常
out.clear();
out = pageContext.pushBody();
%>

testimage.jsp

<%@ page contentType="text/html;charset=gb2312"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
    <title>认证码输入页面</title>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">
</head>
<body>
    <form method=post action="check.jsp">
     <table>
      <tr>
       <td align=left>
        系统产生的认证码:
       </td>
       <td>
        <img border=0 src="image.jsp">
       </td>
      </tr>
      <tr>
       <td align=left>
        输入上面的认证码:
       </td>
       <td>
        <input type=text name=rand maxlength=4 value="">
       </td>
      </tr>
      <tr>
       <td colspan=2 align=center>
        <input type=submit value="提交检测">
       </td>
      </tr>
     </table>
    </form>
</body>
</html>

check.jsp

<%@ page contentType="text/html; charset=gb2312" language="java"
import="java.sql.*" errorPage=""%>
<html>
<head>
    <title>认证码验证页面</title>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <meta http-equiv="Pragma" content="no-cache">
    <meta http-equiv="Cache-Control" content="no-cache">
    <meta http-equiv="Expires" content="0">
</head>
<body>
    <%
     String rand = (String) session.getAttribute("rand");
     String input = request.getParameter("rand");
    %>
    系统产生的认证码为:
    <%=rand%>
    <br>
    您输入的认证码为:
    <%=input%>
    <br>
    <br>
    <%
    if (rand.equals(input)) {
    %>
    <font color=green>输入相同,认证成功!</font>
    <%
    } else {
    %>
    <font color=red>输入不同,认证失败!</font>
    <%
    }
    %>
</body>
</html>
分享到:
评论

相关推荐

    JSP彩色验证码源码

    本源码就是一种实现JSP彩色验证码的方法,旨在帮助开发者快速构建具有高安全性和视觉吸引力的验证码功能。 首先,我们需要了解JSP的基本概念。JSP是Java Servlet技术的一种简化,它允许将HTML代码与Java代码混合...

    JSP自动生成彩色验证码

    本项目重点在于使用JSP(Java Server Pages)技术自动生成彩色验证码,为用户提供一个视觉上更友好的验证体验。下面我们将深入探讨这个主题。 首先,验证码通常由一组随机字符组成,这些字符可以是数字、字母或其他...

    JSP实现彩纹随机码

    ### JSP实现彩纹随机码的关键知识点 #### 1. 设置响应类型和头部信息 JSP页面通过`&lt;%@ page contentType="image/jpeg" %&gt;`设置响应内容类型为图像JPEG格式,这确保了浏览器会正确地显示图像而非文本。同时,通过`...

    教你如何使用jsp生成彩色汉字验证码的源码

    ### 如何使用JSP生成彩色汉字验证码的源码详解 #### 概述 在网站的安全验证环节中,验证码是常见的防止机器自动填写表单的一种手段。本文将详细介绍如何使用Java Server Pages (JSP) 技术来生成彩色的汉字验证码。...

    struts2.1.8+JPA3.0(hibernate实现)+spring2.5+extjs3.2中型BBS项目

    支持上传图片和文件,文件作为附件可以下载,图片可直接在JSP页面中显示 支持回帖,并在主楼中显示 答辩用PPT 选做部分: 帖子搜索 用户查找 管理员对帖子加精、置顶 根据浏览量,自动在首页生成热门帖子列表...

    2021-2022计算机二级等级考试试题及答案No.17446.docx

    - **CGA**: Color Graphics Adapter(彩色图形适配器),是IBM在1981年为其PC机推出的一种彩色显示标准。 - **VGA**: Video Graphics Array(视频图形阵列)或Video Graphics Adapter(视频图形适配器),是由IBM在...

    JavaScript网页特效范例宝典源码

    实例297 在JSP中利用Word自动打印指定格式的会议记录 468 实例298 在ASP中利用Word自动打印指定格式的会议记录 470 实例299 在PHP中调用Word自动打印指定格式的会议记录 472 11.3 利用Excel打印报表 474 实例300 将...

    Java范例开发大全(全书源程序)

    实例105 使用正则表达式验证电话号码的格式 141 6.2 字符串缓存类StringBuffer 143 实例106 创建字符串缓存类 143 实例107 提取单个字符 144 实例108 给指定字符赋值 145 实例109 插入新的字符 146 实例110 ...

    Java范例开发大全 (源程序)

     实例105 使用正则表达式验证电话号码的格式 141  6.2 字符串缓存类StringBuffer 143  实例106 创建字符串缓存类 143  实例107 提取单个字符 144  实例108 给指定字符赋值 145  实例109 插入新的字符 146...

    java范例开发大全(pdf&源码)

    实例105 使用正则表达式验证电话号码的格式 141 6.2 字符串缓存类StringBuffer 143 实例106 创建字符串缓存类 143 实例107 提取单个字符 144 实例108 给指定字符赋值 145 实例109 插入新的字符 146 实例110 插入新的...

    java范例开发大全源代码

     实例105 使用正则表达式验证电话号码的格式 141  6.2 字符串缓存类StringBuffer 143  实例106 创建字符串缓存类 143  实例107 提取单个字符 144  实例108 给指定字符赋值 145  实例109 插入新的...

    java范例开发大全

    实例105 使用正则表达式验证电话号码的格式 141 6.2 字符串缓存类StringBuffer 143 实例106 创建字符串缓存类 143 实例107 提取单个字符 144 实例108 给指定字符赋值 145 实例109 插入新的字符 146 实例110 插入新的...

    400个DreamWeaver插件

    mxp/加入JSP中的Include mxp/用表单外部的事件来提交表单 mxp/用表单外部的事件来控制表单的行为,包括提交,清空等等 mxp/可以对文本框中的内容做多种限制,比如不包含空格、引号等等 mxp/在Dreamweaver的File菜单...

Global site tag (gtag.js) - Google Analytics