在網上每次註冊或者登陸的時候都要求用戶輸入驗證碼,今天咱們來作一個吧。javascript
private static final long serialVersionUID = 1L; //用數組CHARs數組來保存全部可以產生的字符 public static final char[] CHARs={ '2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','J','K','L','M','N','P','Q','R','S','T','U','V','W','X','Y','Z' }; public static Random random=new Random(); //下面是產生六個隨機數 public static String getRandomString(){ StringBuffer buffer=new StringBuffer(); for(int i=0;i<6;i++){ buffer.append(CHARs[random.nextInt(CHARs.length)]); } return buffer.toString(); } //用三個隨機數來分別產生RGB的數值 public static Color getRandomColor(){ return new Color(random.nextInt(255),random.nextInt(255),random.nextInt(255)); } //產生反色的顏色 public static Color getgetReverseColor(Color c){ return new Color(255-c.getRed(),255-c.getGreen(),255-c.getBlue()); }
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("image/jpeg");//生成時的圖像格式 String randomString=getRandomString();//獲取隨機數 request.getSession(true).setAttribute("randomString", randomString); //生成的驗證碼圖像的大小 int width=100; int height=30; Color color=getRandomColor(); Color reverse=getgetReverseColor(color); BufferedImage bi=new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics2D g=bi.createGraphics(); g.setFont(new Font(Font.SANS_SERIF,Font.BOLD,16)); g.setColor(color); g.fillRect(0, 0, width, height); g.setColor(reverse); g.drawString(randomString, 18, 20); //用來產生污點來防止被破解 for(int i=0,n=random.nextInt(100);i<n;i++){ g.drawRect(random.nextInt(width), random.nextInt(height), 1, 1); } ServletOutputStream out=response.getOutputStream(); JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(out); encoder.encode(bi); out.flush(); }
用一個HTML來測試結果html
<!DOCTYPE html> <html> <head> <script type="text/javascript"> function reloadImage(){ document.getElementById('identity').src='servlet/IdentityServlet?ts='+new Date().getTime(); } </script> <img src="servlet/IdentityServlet" id="identity"/> <input type="button" value="換個圖片" onclick="reloadImage()" id="btn"> </head> <body> </body> </html>