JSP隨機產生驗證碼

來源:互聯網
上載者:User
 Code:
  1. Code:   
  2. 1、a.jsp        
  3.       
  4. <%@   page   contentType="text/html;charset=gb2312"   %>          
  5. <!DOCTYPE   HTML   PUBLIC   "-//W3C//DTD   HTML   4.01   Transitional//EN">          
  6. <html>          
  7. <head>          
  8. <title>認證碼輸入頁面</title>          
  9. <meta   http-equiv="Content-Type"   content="text/html;   charset=gb2312">          
  10. <META   HTTP-EQUIV="Pragma"   CONTENT="no-cache">            
  11. <META   HTTP-EQUIV="Cache-Control"   CONTENT="no-cache">            
  12. <META   HTTP-EQUIV="Expires"   CONTENT="0">            
  13. </head>          
  14. <body>          
  15. <form   method=post   action="check.jsp">          
  16. <table>          
  17. <tr>          
  18. <td   align=left>系統產生的認證碼:</td>          
  19. <td><img   border=0   src="image.jsp"></td>          
  20. </tr>          
  21. <tr>          
  22. <td   align=left>輸入上面的認證碼:</td>          
  23. <td><input   type=text   name=rand   maxlength=4   value=""></td>          
  24. </tr>          
  25. <tr>          
  26. <td   colspan=2   align=center><input   type=submit   value="提交檢測"></td>          
  27. </tr>          
  28. </form>          
  29. </body>          
  30. </html>          
  31.       
  32.       
  33. 2、image.jsp        
  34.       
  35.       
  36. <%@   page   contentType="image/jpeg;charset=GB18030"   import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*"   %>          
  37. <%!          
  38. Color   getRandColor(int   fc,int   bc){//給定範圍獲得隨機顏色          
  39.                   Random   random   =   new   Random();          
  40.                   if(fc>255)   fc=255;          
  41.                   if(bc>255)   bc=255;          
  42.                   int   r=fc+random.nextInt(bc-fc);          
  43.                   int   g=fc+random.nextInt(bc-fc);          
  44.                   int   b=fc+random.nextInt(bc-fc);          
  45.                   return   new   Color(r,g,b);          
  46.                   }          
  47. %>          
  48. <%          
  49. //設定頁面不緩衝          
  50. response.setHeader("Pragma","No-cache");          
  51. response.setHeader("Cache-Control","no-cache");          
  52. response.setDateHeader("Expires",   0);          
  53.            
  54. //   在記憶體中建立圖象          
  55. int   width=60,   height=20;          
  56. BufferedImage   image   =   new   BufferedImage(width,   height,   BufferedImage.TYPE_INT_RGB);          
  57.            
  58. //   擷取圖形上下文          
  59. Graphics   g   =   image.getGraphics();          
  60.            
  61. //產生隨機類          
  62. Random   random   =   new   Random();          
  63.            
  64. //   設定背景色          
  65. g.setColor(getRandColor(200,250));          
  66. g.fillRect(0,   0,   width,   height);          
  67.            
  68. //設定字型          
  69. g.setFont(new   Font("Times   New   Roman",Font.PLAIN,18));          
  70.            
  71. //畫邊框          
  72. //g.setColor(new   Color());          
  73. //g.drawRect(0,0,width-1,height-1);          
  74.            
  75.            
  76. //   隨機產生155條幹擾線,使圖象中的認證碼不易被其它程式探測到          
  77. g.setColor(getRandColor(160,200));          
  78. for   (int   i=0;i<155;i++)          
  79. {          
  80.                   int   x   =   random.nextInt(width);          
  81.                   int   y   =   random.nextInt(height);          
  82.                   int   xl   =   random.nextInt(12);          
  83.                   int   yl   =   random.nextInt(12);          
  84.                   g.drawLine(x,y,x+xl,y+yl);          
  85. }          
  86.            
  87. //   取隨機產生的認證碼(4位元字)          
  88. String   sRand="";          
  89. for   (int   i=0;i<4;i++){          
  90.           String   rand=String.valueOf(random.nextInt(10));          
  91.           sRand+=rand;          
  92.           //   將認證碼顯示到圖象中          
  93.           g.setColor(new   Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));//調用函數出來的顏色相同,可能是因為種子太接近,所以只能直接產生          
  94.           g.drawString(rand,13*i+6,16);          
  95. }          
  96.            
  97. //   將認證碼存入SESSION          
  98. session.setAttribute("rand",sRand);          
  99.            
  100.            
  101. //   圖象生效          
  102. g.dispose();          
  103.            
  104. //   輸出圖象到頁面          
  105. ImageIO.write(image,   "JPEG",   response.getOutputStream());          
  106.            
  107.            
  108. %>            
  109.       
  110.       
  111. 3、check.jsp       
  112.       
  113. <%@   page   contentType="text/html;   charset=gb2312"   language="java"   import="java.sql.*"   errorPage=""   %>          
  114. <html>          
  115. <head>          
  116. <title>認證碼驗證頁面</title>          
  117. <meta   http-equiv="Content-Type"   content="text/html;   charset=gb2312">          
  118. <META   HTTP-EQUIV="Pragma"   CONTENT="no-cache">            
  119. <META   HTTP-EQUIV="Cache-Control"   CONTENT="no-cache">            
  120. <META   HTTP-EQUIV="Expires"   CONTENT="0">            
  121. </head>          
  122.            
  123. <body>          
  124. <%            
  125. String   rand   =   (String)session.getAttribute("rand");          
  126. String   input   =   request.getParameter("rand");          
  127. %>          
  128. 系統產生的認證碼為:   <%=   rand   %><br>          
  129. 您輸入的認證碼為:   <%=   input   %><br>          
  130. <br>          
  131. <%          
  132.       if   (rand.equals(input))   {          
  133. %>          
  134. <font   color=green>輸入相同,認證成功!</font>          
  135. <%          
  136.       }   else   {          
  137. %>          
  138. <font   color=red>輸入不同,認證失敗!</font>          
  139. <%          
  140.       }          
  141. %>          
  142. </body>          
  143. </html>     

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.