web.xml 配置对应路径
package com.shancai.controller.rand;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import javax.imageio.ImageIO;
/**
* 一个能生成验证码的类
* 默认四个汉字
* 使用该类生成验证码时
* @author
*/
public class VerifyCodeASNI {
private final Random random = new Random(System.nanoTime());
private int width;
private int height;
private int charNumber = 4;
private float yawpRate = 0.05f; //噪声率
private OutputStream outputStream;
private char[] code;
private char[] code2;
private List<Integer> codelist;
public VerifyCodeASNI() {
//empty
}
/**
* 返回生成的验证码字符串
* @return
*/
public String getVerifyCode(){
return getStr(codelist);
}
public VerifyCodeASNI(int width, int height) {
this.width = width;
this.height = height;
}
private void drawPane(Graphics2D g2d){
g2d.setColor(Color.BLACK);
g2d.setStroke(new BasicStroke(2.0f));
g2d.drawRect(0, 0, width, height);
}
private void drawChars(Graphics2D g2d){
float scale = 1f;
int size = (int) (scale * 30);
StringBuffer sb = new StringBuffer(1);
sb.setLength(1);
g2d.setColor(Color.BLACK);
// code = new char[charNumber];
for (int i = 0; i < charNumber; i++) {
//计算第i个字的x偏移
int offsetWidth = i * (size+1)+10;
//随机大小
int charSize = size;//this.getRandomIntBetween((int) (size * 0.5), size);
//随机样式
int fontStyle = this.getRandomBoolean() ? Font.ITALIC : Font.ITALIC;
g2d.setFont(new Font("隶书", fontStyle, charSize));
//随机颜色
//g2d.setColor(this.getRandomColor());
//随机上移一点
int moveUp = random.nextInt((int) (0.1 * offsetWidth));
//随机字符
sb.setCharAt(0, code[i]);
g2d.drawString(sb.toString(), offsetWidth-moveUp, 45);
}
}
private void drawCharsbody(Graphics2D g2d,int head){
float scale = 1f;
int size = (int) (scale * 30);
StringBuffer sb = new StringBuffer(1);
sb.setLength(1);
g2d.setColor(Color.BLACK);
int offsetWidth;
int moveup;
int v = 30;
int w = 15;
if(head<3){
offsetWidth = head * (size+15)+w;
moveup =70 + v *1;
}else if(head<6){
offsetWidth = (head-3) * (size+15)+w;
moveup =70 + v *2;
}
else{