`
wang_ping001
  • 浏览: 88745 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

彩色验证码

阅读更多
引用
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;


public class VerifyCodeGenerator {

private static final VerifyCodeGenerator generator = new VerifyCodeGenerator();

private final String ATTRIBUTE_NAME = "verifycode";


private final int WIDTH = 15;


private final int HEIGHT = 22;

private final int CODE_LENGTH =5;

private final String RAND_RANGE = "abcdefghijklmnopqrstuvwxyz"
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "1234567890" ;

private final char[] CHARS = RAND_RANGE.toCharArray();

private Random random = new Random();

private VerifyCodeGenerator() {

}

public static VerifyCodeGenerator getInstance() {
return generator;
}

private String getRandString() {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < CODE_LENGTH; i++)
sb.append(CHARS[random.nextInt(CHARS.length)]);
return sb.toString();
}

/**
* ��������ɫ
*
* @param ll
*            ������ɫֵ����(lower limit)
* @param ul
*            ������ɫֵ����(upper limit)
* @return ��ɵ������ɫ����
*/
private Color getRandColor(int ll, int ul) {
if (ll > 255)
ll = 255;
if (ll < 1)
ll = 1;
if (ul > 255)
ul = 255;
if (ul < 1)
ul = 1;
if (ul == ll)
ul = ll + 1;
int r = random.nextInt(ul - ll) + ll;
int g = random.nextInt(ul - ll) + ll;
int b = random.nextInt(ul - ll) + ll;
Color color = new Color(r, g, b);
return color;
}

/**
* ���ָ���ַ��ͼ�����
*
* @param verifyCode
*            ��������ӡ������ַ�
* @return ��ɵ�ͼ�����
*/
private BufferedImage getImage(String verifyCode) {

BufferedImage image = new BufferedImage(WIDTH * CODE_LENGTH, HEIGHT,
BufferedImage.TYPE_INT_RGB);

// ��ȡͼ��������
Graphics graphics = image.getGraphics();

// ���ñ���ɫ
graphics.setColor(getRandColor(0,0));
// ��䱳��ɫ
graphics.fillRect(0, 0, WIDTH * 4, HEIGHT);

// ���ñ߿���ɫ
graphics.setColor(new Color(0, 0,0));
// ���߿�
for (int i = 0; i < 2; i++)
graphics.drawRect(i, i, WIDTH * CODE_LENGTH - i * 2 - 1, HEIGHT - i
* 2 - 1);

// ����������������ɫ
graphics.setColor(getRandColor(50, 100));
// ����50���������
for (int i = 0; i < 100; i++) {
int x1 = random.nextInt(WIDTH * CODE_LENGTH - 4) + 2;
int y1 = random.nextInt(HEIGHT - 4) + 2;
int x2 = random.nextInt(WIDTH * CODE_LENGTH - 2 - x1) + x1;
int y2 = y1;
graphics.drawLine(x1, y1, x2, y2);
}

// ��������
graphics.setFont(new Font("Times New Roman", Font.PLAIN, 18));
// ���ַ�
for (int i = 0; i < this.CODE_LENGTH; i++) {
String temp = verifyCode.substring(i, i + 1);
graphics.setColor(getRandColor(100, 255));
graphics.drawString(temp, 13 * i + 6, 16);
}

// ͼ����Ч
graphics.dispose();

return image;
}


public void printImage(HttpServletRequest request,HttpServletResponse response) {
response.setContentType("image/jpeg");
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 2000);

String verifyCode = this.getRandString();
String str = "ssss";
for (int i = 0; i < 10; i++)
str = str + str;
BufferedImage bi = this.getImage(verifyCode);

request.getSession().setAttribute(ATTRIBUTE_NAME, verifyCode);
try {

ServletOutputStream outStream = response.getOutputStream();

JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(outStream);

encoder.encode(bi);

outStream.flush();

outStream.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}

public boolean check(HttpServletRequest request) {
if (((String) request.getParameter(ATTRIBUTE_NAME)).equals((String) request.getSession().getAttribute(ATTRIBUTE_NAME))) {
request.getSession().removeAttribute(ATTRIBUTE_NAME);
return true;
}
return false;
}
}
分享到:
评论

相关推荐

    登录注册彩色验证码刷新

    彩色验证码: 1.原理:随机生成一个包含字符串的图片,用户读取图片中的字符信息,将其输入到指定文本框中,随着登录或者注册功能的提交将其传递给服务器进行验证处理。 2.作用:防止通过程序进行批量注册或者暴力...

    JSP彩色验证码的实现

    ### JSP彩色验证码的实现 #### 一、概述 在Web应用中,为了防止恶意登录或自动化工具的攻击,通常会采用验证码技术来确保用户的真实性。验证码(CAPTCHA)是一种区分用户是计算机还是人类的全自动程序,常用于阻止...

    java生成验证码源码包括彩色验证码

    java生成验证码源码包括彩色验证码 包括jsp生成验证码和彩色验证码

    优化过的 c# 彩色验证码

    "优化过的C#彩色验证码"是指使用C#编程语言实现的一种经过优化的彩色图像验证码。这个话题涵盖了几方面的技术,包括图像处理、随机数生成、颜色应用以及字符混淆等。 1. **C#编程语言**:C#是由微软开发的一种面向...

    java彩色验证码例子

    Java生成彩色验证码是一种常见的安全措施,用于防止自动化脚本或恶意机器人进行非法操作,例如注册、登录等。在Web开发中,JSP(JavaServer Pages)可以用来创建动态的网页内容,包括验证码图像。以下是对标题和描述...

    彩色验证码实现

    彩色验证码是一种用于网络安全的身份验证机制,它通过显示随机生成的彩色图像来防止自动化程序(如机器人或爬虫)进行非法操作。在网站登录、注册、评论等场景中,彩色验证码可以有效防止恶意注册、垃圾信息的发布...

    JSP实现彩色验证码

    3. **图像处理**:生成彩色验证码需要我们创建并绘制一个图像。这涉及到`java.awt`和`javax.imageio`包中的类,如`BufferedImage`、`Graphics2D`等。我们需要定义图像的大小,然后在图像上画出随机颜色的背景、线条...

    JSP中彩色验证码 注册验证码 中文验证码 图片验证码的生成

    JSP中彩色验证码 注册验证码 中文验证码 图片验证码的生成

    java彩色验证码的生成

    Java 彩色验证码的生成是Web开发中一个重要的安全机制,用于防止自动化程序(如机器人)非法操作,比如注册、登录等。在这个话题中,我们将深入探讨如何在Java中创建彩色且具有挑战性的验证码。 首先,验证码的核心...

    java 生成彩色验证码

    java 生成彩色验证码的程序,改程序可以极大的帮助你,是你可以自动生成彩色的验证码

    JSP彩色验证码【100%可以用,亲自测试可用,带验证功能实例】

    ### JSP 彩色验证码实现解析 #### 一、项目背景与目标 本文将详细介绍如何在JSP中实现彩色验证码的生成与验证功能。彩色验证码不仅能够提高网站的安全性,还可以提升用户体验。根据文档的要求,我们需要创建三个...

    Java彩色验证码Java彩色验证码

    Java彩色验证码Java彩色验证码Java彩色验证码Java彩色验证码Java彩色验证码JavaJava彩色验证码Java彩色验证码Java彩色验证码Java彩色验证码Java彩色验证码Java彩色验证码Java彩色验证码

    JSP实现彩色验证码(源码示例)

    JSP实现彩色验证码(源码示例)

    .net下的彩色验证码源代码

    .NET下的彩色验证码源代码主要涉及的是网络安全领域中的用户验证技术,特别是防止自动化程序(如机器人)非法操作的机制。验证码通常由随机生成的一串字符或数字组成,用户需要正确输入才能完成登录、注册等操作,...

    Js彩色验证码【一个html表单和js验证码有验证效果的实例】

    整个html打开可以看到效果,不包含验证码背景图片,自己找一个命名为code.jpg就有背景了,js验证码比jsp...这个程序既可以直接验证,也可以点击验证码刷新一个新的验证码(当原来的验证码看不清楚的时候),再验证

    JSP彩色验证码,JSP彩色验证码

    JSP彩色验证码JSP彩色验证码JSP彩色验证码

    JSP彩色验证码源码

    **JSP彩色验证码源码详解** 验证码是一种常用的安全机制,用于防止自动机器人或者恶意软件对网站进行非法操作,如注册、登录、评论等。在Web开发中,JSP(JavaServer Pages)作为服务器端脚本语言,常被用来生成...

    中文彩色验证码实现

    中文彩色验证码实现(变形\噪点\点击更换) &lt;br&gt;一个中文彩色验证码程序,实现了文字的变形,随机噪点及点击更换验证码,代码非常简单.

    java 彩色验证码实例

    一个简单的生成彩色验证码的例子,部分代码if (r1 == 13) { r2 = random.nextInt(7); //生成0到7之间的随机数 } else { r2 = random.nextInt(16); //生成0到16之间的随机数 } String str_r2 = rBase[r2]; // ...

    JSP自动生成彩色验证码

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

Global site tag (gtag.js) - Google Analytics