彩色验证码实现
Image.jsp
?<%@ page contentType="image/jpeg" import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*" %>
<%!
//給定范圍,獲得隨機顏色
? 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);
? }
%>
<%
//設置頁面不緩存
? response.setHeader("Pragma","No-cache");
? response.setHeader("Cache-Control","no-cache");
? response.setDateHeader("Expires",0);
? //在內存中創建圖像
? int width=60,height=20;
? BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
? //獲取圖形上下文
? Graphics g=image.getGraphics();
? //生成隨機類
? Random random=new Random();
? //設定背景色
? g.setColor(getRandColor(200,250));
? g.fillRect(0,0,width,height);
? //設定字體
? g.setFont(new Font("Times New Roman",Font.PLAIN,18));
? //隨機產生155干擾線,使圖形中的認證碼不易被其他程序探測到
? g.setColor(getRandColor(160,200));
? for(int i=0;i<155;i++){
??? int x=random.nextInt(width);
??? int y=random.nextInt(height);
??? int x1=random.nextInt(12);
??? int y1=random.nextInt(12);
??? g.drawLine(x,y,x+x1,y+y1);
? }
? //取隨機4位數字
?String sRand="";
? for(int i=0;i<4;i++){
??? String rand=String.valueOf(random.nextInt(10));
??? sRand+=rand;
??? //將認證碼顯示到圖像中
??? g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));
??? //函數調用出來的顏色相同,是因為種子太接近,所以只能直接生成
??? g.drawString(rand,13*i+6,16);
? }
? //將認證碼存入session
?session.setAttribute("rand",sRand);
? //圖像生成
? g.dispose();
? //輸出圖像到頁面
? ImageIO.write(image,"JPEG",response.getOutputStream());
%>
main.jsp
<%@ page contentType="text/html; charset=GBK" %>
<html>
<head>
<title>
認證碼輸入頁面
</title>
<meta http-equiv="Content-Type" content="text/html;charset=gb2312">
</head>
<body bgcolor="#ffffff">
<form method="POST" action="check.jsp">
? <table>
??? <tr>
????? <td align="left">系統產生的認證碼:</td>
????? <td><img border="0" src="image.jsp" alt=""></td>
??? </tr>
??? <tr>
????? <td align="left">輸入上面的認證碼:</td>
????? <td><input type="text" name="rand" maxlength="4" value=""></td>
??? </tr>
??? <tr>
????? <td colspan="2" align="center"><input type="submit" value="提交檢測"></td>
??? </tr>? </table>
? </form>
</body>
</html>
check.jsp
<%@ page contentType="text/html; charset=GBK" import="java.util.*" errorPage="" %>
<html>
<head>
<title>
認證驗證碼頁面
</title>
<meta http-equiv="Content-Type" content="text/html;charset=gb2312">
</head>
<body bgcolor="#ffffff">
<%
? String rand=(String)session.getAttribute("rand");
? String input=request.getParameter("rand");
%>
系統產生的認證碼為:<%=rand%><br>
您輸入的認證碼為:<%=input%><br><br>
? <%
??? if(rand.equals(input)){%>
????? <font color=green>輸入相同,認證成功!!!!</font>
?? <% }else{%>
?? <font color=red>輸入不同,認證失敗!!@@</font>
?? <%}%>
</body>
</html>
總結
- 上一篇: python监控文件内容变化_Pytho
- 下一篇: jupyter notebook代码导出