溫馨提示×

溫馨提示×

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

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

使用Java 如何實現隨機生成驗證碼圖片

發布時間:2020-10-26 19:03:08 來源:億速云 閱讀:279 作者:Leah 欄目:開發技術

使用Java 如何實現隨機生成驗證碼圖片?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

1.情景展示

使用Java 如何實現隨機生成驗證碼圖片

  登錄時,生成隨機驗證碼圖片,如何實現?    

2.原因分析

  后臺生成驗證碼并生成圖片返回至前臺 

3.解決方案

  導包

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.RandomStringUtils;
import base.web.tools.WebUtils;

  獲取驗證碼請求處理

/**
 * 獲取驗證碼
 * @explain
 * @return 隨機數圖片
 */
public String getImage() {
    try {
        int width = 55;
        int height = 25;
        // 取得一個4位隨機數字字符串
        String s = RandomStringUtils.randomNumeric(4);
        HttpServletResponse response = WebUtils.getResponse();
        // 存入cookie,用于與用戶的輸入進行比較
        Cookie cookie = new Cookie("validateCode", s);
        response.addCookie(cookie);
        response.setContentType("images/jpeg");
        response.setHeader("Cache-Control", "no-cache");
 
        ServletOutputStream out = response.getOutputStream();
        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        Graphics g = image.getGraphics();
        // 設定背景色
        g.setColor(getRandColor(200, 250));
        g.fillRect(0, 0, width, height);
 
        // 設置字體
        Font mFont = new Font("宋體", Font.BOLD, 18);
        g.setFont(mFont);
 
        // 畫邊框
        // g.setColor(Color.BLACK);
        // g.drawRect(0, 0, width - 1, height - 1);
 
        // 生成隨機類
        Random random = new Random();
        // 將認證碼顯示到圖象中
        g.setColor(new Color(20 + random.nextInt(110), 20 + random.nextInt(110), 20 + random.nextInt(110)));
        // 將驗證碼畫進圖片
        g.drawString(s, 5, 20);
        // 圖象生效
        g.dispose();
        // 輸出圖象到頁面
        ImageIO.write((BufferedImage) image, "JPEG", out);
        out.flush();
        out.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}
 
/**
 * 給定范圍獲得隨機顏色
 * @explain
 * @param fc
 * @param bc
 * @return
 */
private Color getRandColor(int fc, int bc) {
    Random random = new Random();
    fc = (fc > 255) ? 255 : fc;
    bc = (bc > 255) ? 255 : bc;
    // 獲取3次
    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);
}

  html片段

<img src="<c:url value="/getImage.do"/>" id="randomImage"  height="35px" width="100px" onclick='sjs()' />  

  js片段

function sjs () {
    // 獲取圖片請求后面加一個隨機參數,是為了避免同一個請求瀏覽器拒絕向服務器發送請求的問題(緩存)
    $("#randomImage")[0].src = baseUrl + "/getImage.do&#63;s=" + Math.random();
};

看完上述內容,你們掌握使用Java 如何實現隨機生成驗證碼圖片的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

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

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女