1. 程式人生 > 程式設計 >java實現簡單驗證碼生成

java實現簡單驗證碼生成

簡單驗證碼java實現--servlet類生成 驗證碼img,並寫入session

老師給的原始碼,在此做個記錄,簡單驗證碼,java繪圖

在此鳴謝並附上原始碼:.

// 
package app61;

import java.io.*;
import java.util.*;
import com.sun.image.codec.jpeg.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.awt.*;
import java.awt.image.*;

public class VerifyCode extends HttpServlet {

private Font mFont = new Font("Times New Roman",Font.PLAIN,18); //設定字型

public void doGet(HttpServletRequest request,HttpServletResponse response) throws
ServletException,IOException {
//取得一個1000-9999的隨機數
 HttpSession session = request.getSession(true);
 response.setContentType("image/gif");
 response.setHeader("Pragma","No-cache");
 response.setHeader("Cache-Control","no-cache");
 response.setDateHeader("Expires",0);
 int width = 60,height = 20;

 ServletOutputStream out = response.getOutputStream();
 BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB); //設定圖片大小的
 Graphics gra = image.getGraphics();
 Random random = new Random();
 gra.setColor(getRandColor(200,250)); //設定背景色rand墊底
 gra.fillRect(0,width,height);
 gra.setColor(Color.black); //設定字型色
 gra.setFont(mFont);
 // 隨機產生155條幹擾線,使圖象中的認證碼不易被其它程式探測到
 gra.setColor(getRandColor(160,200));
 for (int i = 0; i < 155; i++) {
  int x = random.nextInt(width);
  int y = random.nextInt(height);
  int xl = random.nextInt(12);
  int yl = random.nextInt(12);
  gra.drawLine(x,y,x + xl,y + yl);
 }

 // 取隨機產生的認證碼(4位數字)
 String sRand = "";
 for (int i = 0; i < 4; i++) {
  String rand = String.valueOf(random.nextInt(10));
  sRand += rand;
  // 將認證碼顯示到圖象中
  gra.setColor(new Color(20 + random.nextInt(110),20 + random.nextInt(110),20 + random.nextInt(110))); //呼叫函數出來的顏色相同,可能是因為種子太接近,所以只能直接生成
  gra.drawString(rand,13 * i + 6,16);
 }
 session.setAttribute("rand",sRand);
 // session.setAttribute("getImg",sRand);
 JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
 encoder.encode(image);
 out.close();
}

static Color getRandColor(int fc,int bc) { //給定範圍獲得隨機顏色
 Random random = new Random();
 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);
}

 //Clean up resources
 public void destroy() {
  }
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。