package com.ssh;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class VerifyCode extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
private int width = 100;
private int height = 40;
private int codeCount = 4;
private int fontHeight = 30;
private int xx = 15;
private String codeStr = "0123456789abcdefghijklmnopqrstuvwxyz";
public void init() throws ServletException {
// System.out.println("aaaaaaaaaaaa");
}
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, java.io.IOException {
// 定义图像buffer
BufferedImage buffImg = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
Graphics2D gd = buffImg.createGraphics();
// 将图像填充为白色
gd.setColor(Color.WHITE);
gd.fillRect(0, 0, width, height);
// 创建字体,字体的大小应该根据图片的高度来定。
Font font = new Font("Fixedsys", Font.PLAIN, fontHeight);
// 设置字体。
gd.setFont(font);
// 画边框。
gd.setColor(Color.blue);
gd.drawRect(0, 0, width - 1, height - 1);
// 随机产生160条干扰线,使图象中的认证码不易被其它程序探测到。
gd.setColor(Color.gray);
// 创建一个随机数生成器类
Random random = new Random();
for (int i = 0; i < 50; i++) {
int x = random.nextInt(width);
int y = random.nextInt(height);
int xl = random.nextInt(25);
int yl = random.nextInt(25);
gd.drawLine(x, y, x + xl, y + yl);
}
// randomCode用于保存随机产生的验证码,以便用户登录后进行验证。
StringBuffer randomCode = new StringBuffer();
int red = 0, green = 0, blue = 0;
// 随机产生codeCount数字的验证码。
for (int i = 0; i < codeCount; i++) {
// 得到随机产生的验证码数字。
String strRand = getRand();
// 产生随机的颜色分量来构造颜色值,这样输出的每位数字的颜色值都将不同。
red = random.nextInt(255);
green = random.nextInt(255);
blue = random.nextInt(255);
// 用随机产生的颜色将验证码绘制到图像中。
gd.setColor(new Color(red, green, blue));
gd.drawString(strRand, (i + 1) * xx, 30);
// 将产生的四个随机数组合在一起。
randomCode.append(strRand);
}
// 将四位数字的验证码保存到Session中。
req.getSession().setAttribute("validateCode", randomCode.toString());
// 禁止图像缓存。
resp.setHeader("Pragma", "no-cache");
resp.setHeader("Cache-Control", "no-cache");
resp.setDateHeader("Expires", 0);
resp.setContentType("image/jpeg");
// 将图像输出到Servlet输出流中。
ServletOutputStream sos = resp.getOutputStream();
ImageIO.write(buffImg, "jpeg", sos);
sos.close();
}
private String getRand() {
char[] codec = codeStr.toCharArray();
int codeIndex = (int) (codeStr.length() * Math.random());
char s = codec[codeIndex];
return String.valueOf(s);
}
}
分享到:
相关推荐
java 验证码 java 验证码 java 验证码 java 验证码
Java验证码框架.可实现多种验证很强大
java 验证码识别 ocr java 验证码识别 ocr
70.java验证码生成.zip70.java验证码生成.zip70.java验证码生成.zip70.java验证码生成.zip70.java验证码生成.zip70.java验证码生成.zip70.java验证码生成.zip70.java验证码生成.zip70.java验证码生成.zip70.java...
java 验证码识别源程序 windows版本 概率90%以上
Java验证码生成库 JCaptcha
java验证码组件Jcaptcha,希望对大家有所帮助!!!
java验证码识别源码,验证码生成地址自己添加,main 函数两个方法取消注释
java验证码代码,可直接引入到自己的项目中,就可以有验证码功能实现
比较常见的Java验证码(解压导入MyEclipse即可),思路清晰,较容易理解!
csdn上三种java验证码生成方法,以及谷歌开源验证码,总共四种验证码生成集合。将生成的四个验证图片放在一个页面上以供比对,全部可以运行。 四种方法分别为: 1. 数字、字母、汉字混合验证码,叠影(给力)、扭曲 ...
Java验证码,这里写了两个方法,仅供参考
java验证码识别示例
Java验证码案例,全新的Java验证码严重源码
java验证码识别 JAVA知识巩固 源码 java验证码识别 java验证码识别
学习时使用的验证码java程序,很简单,对于初学者帮助很大。
纯Java生成验证码图片工具类。使用时直接解压,将工具类导入Java项目即可,直接调用生成验证码方法即可。
验证码是各项目做登录功能常常使用的功能,现分享一个实现的源码。
一个java验证码的例子,适合初学者来学习。。。。。。。。