生成純數字的驗證碼
阿新 • • 發佈:2019-02-10
public class RandomCode { private int width = 84; private int height = 28; public void getCode(HttpServletRequest request,HttpServletResponse response) throws IOException{ BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics2D g = image.createGraphics(); //建立一個隨機數生成器類 Random random = new Random(); g.setColor(Color.WHITE); g.fillRect(0, 0, width, height); //建立字型,字型的大小應該根據圖片的高度來定 Font font = new Font("雅黑", Font.ITALIC, 30); //設定字型 g.setFont(font); //畫邊框 g.setColor(Color.BLACK); g.drawRect(0, 0, width, height); //隨機產生160條幹擾線,使影象中的認證碼不易被其他程式探測到 g.setColor(Color.GRAY); for (int i = 0; i < 10; i++) { int x = random.nextInt(width); int y = random.nextInt(height); int xl = random.nextInt(12); int yl = random.nextInt(12); g.drawLine(x, y, x+xl, y+yl); } //randomCode用於儲存隨機產生的驗證碼,以便使用者登入後進行驗證 StringBuffer randomCode=new StringBuffer(); int red=0,green=0,blue=0; //隨機產生4位數字的驗證碼 for (int i = 0; i < 5; i++) { //得到產生的隨機驗證碼數字 String strRand = String.valueOf(random.nextInt(10)); //產生隨機的顏色分量來構造顏色值,這樣輸出的每位數字的顏色值都將不同 red=random.nextInt(200); green=random.nextInt(200); blue=random.nextInt(200); //產生隨機高度13至height之間 float imght = 0; while(imght<=12){ imght = Float.parseFloat(String.valueOf(random.nextInt(height))); } //用隨機產生的顏色將驗證碼繪製到影象中 g.setColor(new Color(red, green, blue)); g.drawString(strRand, 13*i+6, height); //將產生的四個隨機數組合在一起 randomCode.append(strRand); } //將四位數字的驗證碼儲存到Session中 HttpSession session = request.getSession(); session.setAttribute("randomCode", randomCode.toString()); //禁止影象快取 response.setHeader("Pragma", "no-cache"); response.setHeader("Cache-Control", "no-cache"); response.setDateHeader("Expires", 0); response.setContentType("image/jpeg"); //將影象輸出到Servlet輸出流中 ServletOutputStream stream = response.getOutputStream(); ImageIO.write(image, "jpeg", stream); stream.close(); } }