package cn.rx.oamp.util;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public final class ImageCode {
private static final Random random = new Random();
private static final Font[] CODEFONT = { new Font("宋体", Font.BOLD, 25), new Font("宋体", Font.BOLD, 25), new Font("宋体", Font.BOLD, 25),
new Font("宋体", Font.BOLD, 25) };
private static final Color[] FONTCOLOR = { Color.ORANGE, Color.RED, Color.PINK, Color.BLUE, Color.GREEN };
private static final Color[] BGCOLOR = { Color.WHITE, Color.GREEN };
private static final Color LINECOLOR = new Color(242, 234, 15);
private static final String[] CODE = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M",
"N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" };
private static StringBuffer CONDENUMBER = null;
private static final int WIDTH = 100, HEIGHT = 25;
public final String image(HttpServletRequest request, HttpServletResponse response) {
CONDENUMBER = new StringBuffer();
BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
g.setColor(BGCOLOR[random.nextInt(1)]);
g.fillRect(0, 0, WIDTH, HEIGHT);
for (int i = 0; i < 4; i++) {
drawCode(g, i);
}
drawNoise(g, 8);
g.setColor(Color.gray);
g.drawRect(0, 0, WIDTH - 1, HEIGHT - 1);
g.dispose();
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
response.setContentType("image/png");
ServletOutputStream sos = null;
try {
sos = response.getOutputStream();
ImageIO.write(image, "png", sos);
sos.flush();
sos.close();
} catch (Exception e) {
e.printStackTrace();
return null;
}
return CONDENUMBER.toString();
}
private final void drawCode(Graphics graphics, int i) {
String number = CODE[random.nextInt(36)];
graphics.setFont(CODEFONT[random.nextInt(4)]);
graphics.setColor(FONTCOLOR[random.nextInt(5)]);
graphics.drawString(number, 10 + i * 20, 20);
CONDENUMBER.append(number);
}
private final void drawNoise(Graphics graphics, int lineNumber) {
graphics.setColor(LINECOLOR);
int pointX1, pointY1, pointX2, pointY2;
for (int i = 0; i < lineNumber; i++) {
pointX1 = 1 + (int) (Math.random() * WIDTH);
pointY1 = 1 + (int) (Math.random() * HEIGHT);
pointX2 = 1 + (int) (Math.random() * WIDTH);
pointY2 = 1 + (int) (Math.random() * HEIGHT);
graphics.drawLine(pointX1, pointY1, pointX2, pointY2);
}
}
}
分享到:
相关推荐
java 验证码工具类 java 验证码工具类 java 验证码工具类java 验证码工具类 java 验证码工具类 java 验证码工具类java 验证码工具类 java 验证码工具类 java 验证码工具类java 验证码工具类 java 验证码工具类 java ...
"纯Java验证码工具类" 提供了一种简便的方法来生成这种安全机制,无需依赖其他语言或库。这个工具类可以被轻松地集成到任何Java项目中,为你的应用程序添加一道防线。 验证码生成通常包括以下几个关键步骤: 1. **...
java 验证码工具类java 验证码工具类java 验证码工具类java 验证码工具类java 验证码工具类java 验证码工具类java 验证码工具类java 验证码工具类java 验证码工具类java 验证码工具类java 验证码工具类java 验证码...
可以通过调用此工具类来轻松实现验证码
在实际应用中,验证码工具类通常会封装这些功能,提供简单的API供其他部分代码调用。例如,可能有一个`generate()`方法用于生成验证码,一个`getImageBytes()`方法用于获取验证码图像的字节数组,以及一个`validate...
Java验证码工具类-带Main方法可以独立运行,无需Jar依赖,只需要Java环境 一个工具类就可以生成漂亮的验证码 String verifyCode = generateVerifyCode(4); File file = new File(dir, verifyCode + ".jpg"); ...
CaptchaUtil 是 Java 语言封装的一个用于生成验证码的工具类,支持多种字体、干扰线、圈圈等作为背景,方便实用。
该工具类使用随机字符生成验证码,并支持自定义验证码长度和字体样式。生成的验证码图片背景透明,线条清晰,可轻松辨认。本源码包含了工具类源码及调用示例,可供开发者参考使用,集成到您的项目中。
java生成验证码的工具类,这个现在有依赖可以直接引入调用,但这个工具类没有引入依赖,大家也容易看懂代码,理解其含义。也可直接去工具类中调整生成验证码的宽度、高度、颜色、背景颜色、生成的随机数数量、干扰线...
随机生成验证码工具类 长度为4位或者6位
Java图片验证码工具类是一种在Web应用中用于防止恶意自动化操作(如机器人)的常用安全机制。它通过生成随机的字符序列并将其显示为图片来工作,用户需要输入看到的字符才能完成验证。以下是对这个Java工具类的详细...
Java验证码工具类是一种在Web应用中广泛使用的组件,主要用于用户身份验证,防止恶意自动化操作,如机器人注册、投票刷票等。在这个Java开发的验证码工具类中,它提供了生成和验证验证码的功能,同时包含了文档说明...
主要介绍了Java生成图形验证码工具类,本文思路明确介绍的非常详细,需要的朋友可以参考下
综上所述,Java验证码工具类的实现涉及到图像处理、随机数生成、Web交互等多个方面,是保障Web应用安全性的重要组成部分。通过合理的实现和不断优化,可以有效防止自动化攻击,保护用户的账户安全。
这篇博客文章“java验证码生成类”提供了一个简单的示例,下面我们将深入探讨验证码生成的相关知识点。 首先,验证码的基本原理是生成一段随机的、难以由机器识别的文字或数字序列,然后要求用户在限定时间内输入这...
本项目提供的"验证码工具类.rar"是一个Java实现的简单验证码生成器,能够生成四位数字的随机验证码,并具有字体和颜色的随机性,以及添加干扰线以增加机器识别的难度。 首先,我们来看核心类`VerifyCode.java`。这...
java生成图形验证码工具类,很实用的东西
本资源提供了两种实现方式:基于Servlet和Struts2(Action)的验证码工具类。以下是对这两个版本的验证码工具类的详细解释。 ### Servlet版验证码工具类 1. **验证码生成**: Servlet版本的验证码工具类通常会...
好看的图片验证码,包含干扰线、噪点、扭曲图片等。。
本篇文章将详细讲解基于PHP的验证码工具类——KCAPTCHA,以及如何使用它来增强网站的安全性。 首先,验证码(CAPTCHA)全称为“Completely Automated Public Turing test to tell Computers and Humans Apart”,即...