1、
1、设置图片的大小(宽、高)
2、getNum是一个产生4位随机数
2、
颜色的属性是RGB 设置三个随机数产生不同的颜色效果
干扰线 通过随机产生的位置来划线
干扰线的颜色由color来设置
3、
对4位随机数进行一个间隔
验证码是对网站的一种保护,防止被恶意攻击的一种方法
其中验证应该具有随机不确定性,带有一定干扰,以免被机器识别
失去原本应该具有的功能
运行的效果图:
package cn.edu.mju.project24.LoginController;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;
@WebServlet("/captche")
public class CaptcheController extends HttpServlet{
@Override
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
ServletOutputStream sos = res.getOutputStream();
ImageIO.write(generatePic(270,130),“JPEG”,sos);
sos.flush();
sos.close();
}
public String getNum() {
int ran = (int) (Math.random() * 9000) + 1000;
return String.valueOf(ran);
}
private BufferedImage generatePic(int width,int height)
{
BufferedImage image =new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
Graphics g=image.getGraphics();
g.setFont(new Font("宋体",Font.BOLD,27));
g.setColor(Color.WHITE);
g.fillRect(0, 0, width, height); //填充背景颜色
Random rnd=new Random();
Color color =new Color (rnd.nextInt(256),rnd.nextInt(256),rnd.nextInt(256));
for (int i = 0; i < 35; i++) {
Random ran = new Random();
int xt = ran.nextInt(270);
int yt = ran.nextInt(130);
int xe = ran.nextInt(xt + 10);
int ye = ran.nextInt(yt + 10);
g.setColor(color); //随机颜色
g.drawLine(xt, yt, xe, ye);
}
g.setColor(color);
String checkCode = getNum();
StringBuffer s = new StringBuffer();
for (int i = 0; i < checkCode.length(); i++) {
s.append(checkCode.charAt(i) + " ");
}
g.drawString(s.toString(), 70, 35);
return image;
}
}