溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JQuery + Struts2 生成驗證碼

發(fā)布時間:2020-07-20 11:21:12 來源:網(wǎng)絡 閱讀:738 作者:舞_YX 欄目:web開發(fā)

 

-- 用于生成驗證碼

  1. public class RandomNumUtil { 
  2.  
  3.     private ByteArrayInputStream p_w_picpath;// 圖像 
  4.  
  5.     private String str;// 驗證碼 
  6.  
  7.     public RandomNumUtil() { 
  8.         init(); 
  9.     } 
  10.  
  11.     private void init() { 
  12.         // 在內存中創(chuàng)建圖象 
  13.         int width = 85, height = 20
  14.         BufferedImage p_w_picpath = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB); 
  15.          
  16.         // 獲取圖形上下文 
  17.         Graphics g = p_w_picpath.getGraphics(); 
  18.          
  19.         // 生成隨機類 
  20.         Random random = new Random(); 
  21.          
  22.         // 設定背景色 
  23.         g.setColor(getRandColor(200250)); 
  24.         g.fillRect(00, width, height); 
  25.          
  26.         // 設定字體 
  27.         g.setFont(new Font("Times New Roman", Font.PLAIN, 12)); 
  28.          
  29.         // 隨機產(chǎn)生155條干擾線,使圖象中的認證碼不易被其它程序探測到 
  30.         g.setColor(getRandColor(160200)); 
  31.         for (int i = 0; i < 155; i++) { 
  32.             int x = random.nextInt(width); 
  33.             int y = random.nextInt(height); 
  34.             int xl = random.nextInt(12); 
  35.             int yl = random.nextInt(12); 
  36.             g.drawLine(x, y, x + xl, y + yl); 
  37.         } 
  38.         // 取隨機產(chǎn)生的認證碼(6位數(shù)字) 
  39.         String sRand = ""
  40.         for (int i = 0; i < 6; i++) { 
  41.             String rand = getVerify(random.nextInt(3)); 
  42.             sRand += rand; 
  43.             // 將認證碼顯示到圖象中 
  44.             g.setColor(new Color(20 + random.nextInt(110), 20 + random.nextInt(110), 20 + random.nextInt(110))); 
  45.             // 調用函數(shù)出來的顏色相同,可能是因為種子太接近,所以只能直接生成 
  46.             g.drawString(rand, 13 * i + 6, random.nextInt(10) + 10); 
  47.         } 
  48.         // 賦值驗證碼 
  49.         this.str = sRand; 
  50.  
  51.         // 圖象生效 
  52.         g.dispose(); 
  53.         ByteArrayInputStream input = null
  54.         ByteArrayOutputStream output = new ByteArrayOutputStream(); 
  55.         try { 
  56.             ImageOutputStream p_w_picpathOut = ImageIO.createImageOutputStream(output); 
  57.             ImageIO.write(p_w_picpath, "JPEG", p_w_picpathOut); 
  58.             p_w_picpathOut.close(); 
  59.             input = new ByteArrayInputStream(output.toByteArray()); 
  60.         } catch (Exception e) { 
  61.             System.out.println("驗證碼圖片產(chǎn)生出現(xiàn)錯誤:" + e.toString()); 
  62.         } 
  63.  
  64.         this.p_w_picpath = input;/* 賦值圖像 */ 
  65.     } 
  66.  
  67.      /* 隨機產(chǎn)生顏色 */   
  68.     private Color getRandColor(int fc, int bc) { 
  69.         Random random = new Random(); 
  70.         if (fc > 255
  71.             fc = 255
  72.         if (bc > 255
  73.             bc = 255
  74.         int r = fc + random.nextInt(bc - fc); 
  75.         int g = fc + random.nextInt(bc - fc); 
  76.         int b = fc + random.nextInt(bc - fc); 
  77.         return new Color(r, g, b); 
  78.     } 
  79.      
  80.     /** 
  81.      * 生成驗證碼 
  82.      * @param i 0為小寫字母  
  83.      * 1 為大寫字母 
  84.      * 2為普通數(shù)字 
  85.      * @return 
  86.      */ 
  87.     private String getVerify(int i){ 
  88.         String str = ""
  89.         if(i == 0){ 
  90.             char c = 'a'
  91.             c=(char)(c+(int)(Math.random()*26)); 
  92.             str = c + ""
  93.         }else if(i == 1){ 
  94.             char c='A'
  95.             c=(char)(c+(int)(Math.random()*26)); 
  96.             str = c + ""
  97.         }else if(i == 2){ 
  98.             str = new Random().nextInt(10) + ""
  99.         } 
  100.         return str; 
  101.     } 
  102.  
  103.     public ByteArrayInputStream getImage() { 
  104.         return p_w_picpath; 
  105.     } 
  106.  
  107.     public void setImage(ByteArrayInputStream p_w_picpath) { 
  108.         this.p_w_picpath = p_w_picpath; 
  109.     } 
  110.  
  111.     public String getStr() { 
  112.         return str; 
  113.     } 
  114.  
  115.     public void setStr(String str) { 
  116.         this.str = str; 
  117.     } 

-- Struts2

  1. public class UtilAction extends ActionSupport { 
  2.  
  3.     private ByteArrayInputStream inputStream;  
  4.      
  5.     @Override 
  6.     public String execute() throws Exception { 
  7.         // TODO Auto-generated method stub 
  8.          RandomNumUtil rdnu = new RandomNumUtil();       
  9.             this.setInputStream(rdnu.getImage());//取得帶有隨機字符串的圖片       
  10.             ActionContext.getContext().getSession().put("validateCode", rdnu.getStr());//取得隨機字符串放入HttpSession  
  11.             return SUCCESS;   
  12.     } 
  13.  
  14.     public ByteArrayInputStream getInputStream() { 
  15.         return inputStream; 
  16.     } 
  17.  
  18.     public void setInputStream(ByteArrayInputStream inputStream) { 
  19.         this.inputStream = inputStream; 
  20.     } 

-- JQuery

  1. $(function() { 
  2.     $("#randomCode").attr("src","verify"); 
  3.     $("#refresh").click( 
  4.         function() { 
  5.             $("#randomCode").attr("src","verify"); 
  6.     }); 
  7. }) 

-- Struts2 xml配置

  1. <action name="verify" class="verify.UtilAction"> 
  2.      <result type="stream">    
  3.               <param name="contentType">p_w_picpath/jpeg</param>         
  4.               <param name="inputName">inputStream</param>         
  5.          </result>  
  6. </action> 

-- jsp頁面

  1. <body> 
  2.     <img src="" width=150 height="50" alt="驗證碼圖片" id="randomCode" /> 
  3.     <span id="refresh" style="cursor: pointer;">換張圖片</span> 
  4. </body> 

--效果如圖 

JQuery + Struts2 生成驗證碼

 

 

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。

AI