1F [原创]分享我现在用的图形验证码Servlet源码 唧唧 Post by : 2008-06-19 10:53:52.0
演示:
java代码
- package org.javawind.servlet;
-
- 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.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
-
-
- public class SysCode extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
- private static final long serialVersionUID = -5981700888850353189L;
- public SysCode() {
- super();
- }
-
- @SuppressWarnings("static-access")
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
-
- response.setContentType("image/jpeg");
- response.setHeader("Pragma","No-cache");
- response.setHeader("Cache-Control","no-cache");
- response.setDateHeader("Expires",0);
-
- int width=60, height=20,len=4;
- String base = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
- int length = base.length();
-
- BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
-
- Graphics g = image.getGraphics();
-
- Random random = new Random();
-
- g.setColor(getRandColor(random,200,250));
- g.fillRect(0, 0, width, height);
-
- String[] fontTypes = {"tahoma","Atlantic Inline","fantasy","Times New Roman","Georgia","Arial", "Helvetica", "sans-serif","System"};
- int fontTypesLength = fontTypes.length;
-
- g.setColor(getRandColor(random,160,200));
- g.setFont(new Font("Times New Roman",Font.PLAIN,12));
- for (int i=0;i<6;i++)
- {
- g.drawString("!@#$%^,.;'[javawind.net]/<&*()>:5277",0,5*(i+2));
- }
-
- String sRand="",pStr="";
- for (int i=0;i<len;i++)
- {
- int start = random.nextInt(length);
- String rand=base.substring(start,start+1);
- sRand+=rand;
-
- g.setColor(getRandColor(random,10,150));
-
- g.setFont(new Font(fontTypes[random.nextInt(fontTypesLength)],Font.BOLD,16));
-
-
- pStr = sRand.substring(i,i+1);
- if(i==0){
- g.drawString(pStr,2,14);
- }
- if(i==1){
- g.drawString(pStr,15,16);
- }
- if(i==2){
- g.drawString(pStr,30,15);
- }
- if(i==3){
- g.drawString(pStr,45,13);
- }
- }
-
-
- request.getSession().setAttribute("SystemCode",sRand);
-
- g.dispose();
-
- ImageIO.write(image,"JPEG",response.getOutputStream());
- }
-
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
-
- }
-
- protected Color getRandColor(Random random,int fc,int bc)
- {
- if(fc>255) fc=255;
- if(bc>255) bc=255;
- int r=fc+random.nextInt(bc-fc);
- int g=fc+random.nextInt(bc-fc);
- int b=fc+random.nextInt(bc-fc);
- return new Color(r,g,b);
- }
- }
|