java验证码

来源:互联网 发布:网络没有上传速度 编辑:程序博客网 时间:2024/06/06 16:31
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.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class CheckCodeServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("image/jpeg");
BufferedImage image = new BufferedImage(124, 28, BufferedImage.TYPE_3BYTE_BGR);//new一个图片
Graphics pen = image.getGraphics();//得到一个画笔
pen.setColor(Color.lightGray);//设置画笔的颜色
pen.fillRect(0, 0, 124, 28);//画一个矩形,可以改变背景颜色
pen.setFont(new Font("微软雅黑", Font.BOLD, 20));//设置字体
String checkCode = getStr();//验证码的内容
request.getSession().setAttribute("yzm", checkCode);//存入session
for (int i = 0; i < checkCode.length(); i++) {//循环将验证码画如到图片
pen.setColor(getColors());
pen.drawString(checkCode.charAt(i)+"", i*22+22, (int)(Math.random()*14+14));
}
//随机两个线条
for (int i = 0; i < (int)(Math.random()*4+1); i++) {
pen.setColor(getColors());
pen.drawLine(0, (int)(Math.random()*28), 124, (int)(Math.random()*28));
}
//输出图片
ServletOutputStream sos = response.getOutputStream();
ImageIO.write(image, "png", sos);
sos.flush();
sos.close();
}
/**
* 获得随机的验证码
* @return
*/
public String getStr(){
String str = "q,w,e,r,t,y,u,i,o,p,a,s,d,f,g,h,j,k,l,z,x,c,v,b,n,m,1,2,3,4,5,6,7,8,9,0";
String[] strs = str.split(",");
String reslut = "";
for (int i = 0; i < 4; i++) {
int index = (int) (Math.random()*strs.length);
reslut+=strs[index];
}
return reslut;
}
/**
* 获取随机的颜色
*/
public Color getColors(){
Random random = new Random();
int r = random.nextInt(256);
int g = random.nextInt(256);
int b = random.nextInt(256);
return new Color(r, g, b);
}
}
<!--HTML-->
<img src = "CheckCodeServlet" onclick="changeCode()" id="imgCode"/>
//更换验证码
function changeCode(){
document.getElementById("imgCode").src = "CheckCodeServlet?act="+Math.random();
}
0 0
原创粉丝点击