/*
* 功能说明:生成验证码图片,将验证码保存进session里
* 参数说明:
* count:验证码的字符个数
* width:验证码图片宽度
* height:验证码图片高度
* type:类型 0-纯数字 1-纯大写字母 2-数字和大学字母混合
*/
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.imageio.ImageIO;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ValidationCodeServlet extends HttpServlet {
private static final long serialVersionUID = 6777280022666782466L;
private final int TYPE_NUMBER = 0;
private final int TYPE_LETTER = 1;
private final int TYPE_MULTIPLE = 2;
private int width;
private int height;
private int count;
private int type;
private String validate_code;
private Random random;
private Font font;
private int line;
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
width = 56;
height = 22;
count = 4;
type = TYPE_NUMBER;
random = new Random();
line = 200;
}
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
response.setContentType("image.jpeg");
String reqCount = request.getParameter("count");
String reqWidth = request.getParameter("width");
String reqHeight = request.getParameter("height");
String reqType = request.getParameter("type");
if (reqCount != null && reqCount != "")
this.count = Integer.parseInt(reqCount);
if (reqWidth != null && reqWidth != "")
this.width = Integer.parseInt(reqWidth);
if (reqHeight != null && reqHeight != "")
this.height = Integer.parseInt(reqHeight);
if (reqType != null && reqType != "")
this.type = Integer.parseInt(reqType);
font = new Font("Courier New", Font.BOLD, width / count);
BufferedImage image = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
g.setColor(getRandColor(200, 250));
g.fillRect(0, 0, width, height);
g.setColor(getRandColor(160, 200));
for (int i = 0; i < line; 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);
}
g.setFont(font);
validate_code = getValidateCode(count, type);
request.getSession().setAttribute("validate_code", validate_code);
for (int i = 0; i < count; i++) {
g.setColor(new Color(20 + random.nextInt(110), 20 + random
.nextInt(110), 20 + random.nextInt(110)));
int x = (width / count) * i;
int y = ((height + font.getSize()) / 2) - 5;
g.drawString(String.valueOf(validate_code.charAt(i)), x, y);
}
g.dispose();
ImageIO.write(image, "JPEG", response.getOutputStream());
}
@Override
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
private Color getRandColor(int from, int to) {
Random random = new Random();
if (to > 255)
from = 255;
if (to > 255)
to = 255;
int rang = Math.abs(to - from);
int r = from + random.nextInt(rang);
int g = from + random.nextInt(rang);
int b = from + random.nextInt(rang);
return new Color(r, g, b);
}
private String getValidateCode(int size, int type) {
StringBuffer validate_code = new StringBuffer();
for (int i = 0; i < size; i++) {
validate_code.append(getOneChar(type));
}
return validate_code.toString();
}
private String getOneChar(int type) {
String result = null;
switch (type) {
case TYPE_NUMBER:
result = String.valueOf(random.nextInt(10));
break;
case TYPE_LETTER:
result = String.valueOf((char) (random.nextInt(26) + 65));
break;
case TYPE_MULTIPLE:
if (random.nextBoolean()) {
result = String.valueOf(random.nextInt(10));
} else {
result = String.valueOf((char) (random.nextInt(26) + 65));
}
break;
default:
result = null;
break;
}
if (result == null)
throw new NullPointerException("获取验证码出错");
return result;
}
}
分享到:
相关推荐
一个.net core,跨平台的图形验证码生成工具包,基于ImageSharp。
C# 如何自动生成验证码(Web图形验证码生成示例),相信好多人有要用哦(源码) 生成5位数字的图开验证码
java系图形验证码合集 包括数字计算验证码,中文验证码,简单验证码,复杂条纹验证码
集成了自动生成图形验证码
本程序通过VB编写实现验证码生成,并根据用户的输入判断验证码是否相同,程序实现思路大致是这样的:初始化随机种子,生成随机校验码,显示校验码,添加噪点(防止自动图像识别),设置画点随机位置,设置画点随机...
This is a digital graphic verification code written in canvas(这是一个vue的插件,使用canvas来生成图形验证码)
Android生成验证码,安卓端生成图形验证码,在应用登录,注册时候使用校对验证码。
主要为大家详细介绍了java图形验证码生成工具类,web页面校验验证码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
ASP图形验证码代码ASP图形验证码代码ASP图形验证码代码ASP图形验证码代码ASP图形验证码代码ASP图形验证码代码ASP图形验证码代码ASP图形验证码代码ASP图形验证码代码ASP图形验证码代码ASP图形验证码代码ASP图形验证码...
ASPX页面 <img src="./ValidateImage.aspx" /> CS后台 Session["ValidateCode"] 用这个就可以得到值了 <br>非常的简单...源码...
c#生成图形验证码 --一图片的形式生成验证码
基于Golang实现的图片验证码生成库,可以实现随机字母个数,随机直线,随机噪点等。可以设置任意多字体,每个验证码随机选一种字体展示。
c#编写的生成图形验证码的类,支持算式验证码和字符验证码。使用时先实例化类,就可以直接调用Image属性获得验证码图形,Text属性是验证码的文本,如果使用的是算式验证码,可以调用类的getCodeValue方法获取验证码...
采用asp.net生成图形验证码的文件,代码简单清晰。
有没有发现最后生成了一串长的base64编码 把这一串编码放到img标签在前面加上"data:image/gif;base64,"是能直接使用的 ;base64,(你的base64编码)"/> 验证码最佳宽高计算公式:字体大小和图片高度相等,图片宽度=...
jsp图形验证码源码,实现系统自动生成图片验证,输出随机验证码图片流,并返回验证码值,生成指定验证码图像文件。
c# 图形验证码的生成和验证 适合初学者参考
本程序是采用Windows GDI+技术模拟Web上的验证码生成而设计的一款Windows版验证码随机生成程序,利用GDI+图形图像处理技术,可随机生成强验证码(即汉字验证码)或弱验证码(即数字和字母组合验证码),支持验证码的...
ASP图形验证码生成程序,有DEMO,可自行修改参数。