最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java后端實現(xiàn)生成驗證碼圖片的示例代碼

 更新時間:2023年12月21日 13:56:06   作者:小筱在線  
驗證碼是一種用于驗證用戶身份或確保用戶操作安全的技術手段,通常以圖形、聲音或文字的形式出現(xiàn),本文主要介紹了如何通過java實現(xiàn)生成驗證碼圖片,需要的可以參考下

驗證碼是一種用于驗證用戶身份或確保用戶操作安全的技術手段。它通常以圖形、聲音或文字的形式出現(xiàn),要求用戶在登錄、注冊或進行特定操作之前輸入正確的驗證碼。

驗證碼的目的是防止網(wǎng)絡惡意行為,如惡意注冊、暴力破解密碼、爬取數(shù)據(jù)等。通過要求用戶正確輸入驗證碼,可以有效阻止機器人或自動化程序的訪問。

常見的驗證碼形式包括圖像驗證碼、音頻驗證碼和文字驗證碼。圖像驗證碼要求用戶識別并選擇特定圖像中的特定物體或圖案,音頻驗證碼要求用戶聽取一段隨機生成的音頻并輸入其中的數(shù)字或字母,文字驗證碼則要求用戶識別并輸入特定的字母、數(shù)字或符號。

驗證碼的生成和驗證通常基于特定的算法和技術,如隨機數(shù)生成、圖像識別、語音合成等。驗證碼通常具有一定的復雜性和難度,以確保只有真正的用戶能夠解讀和輸入正確的驗證碼。

然而,驗證碼也可能給用戶帶來一定的不便,特別是對于視力或聽力有障礙的用戶。因此,一些網(wǎng)站和應用程序也提供了可選的輔助功能,如文字提示、放大鏡、語音提示等,以幫助用戶更好地完成驗證碼驗證。

下面講解一下如何使用Java生成驗證碼圖片。

代碼如下:

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random;
 
/**
 * @author tobiasy
 * @date 2020/4/10
 */
public class ValidateCode {
 
    private int width = 160;
    private int height = 40;
    /**
     * 驗證碼字符個數(shù)
     */
    private int codeCount = 5;
    /**
     * 驗證碼干擾線數(shù)
     */
    private int lineCount = 150;
    /**
     * 驗證碼
     */
    private String code = null;
    /**
     * 驗證碼圖片Buffer
     */
    private BufferedImage buffImg = null;
 
    // 驗證碼范圍,去掉0(數(shù)字)和O(拼音)容易混淆的(小寫的1和L也可以去掉,大寫不用了)
//    private char[] codeSequence = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R',
//            'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '2', '3', '4', '5', '6', '7', '8', '9'};
    private char[] codeSequence = {'1', '2', '3', '4', '5', '6', '7', '8', '9'};
 
    public ValidateCode() {
        this.createCode();
    }
 
    public ValidateCode(int width, int height) {
        this.width = width;
        this.height = height;
        this.createCode();
    }
 
    public ValidateCode(int width, int height, int codeCount, int lineCount) {
        this.width = width;
        this.height = height;
        this.codeCount = codeCount;
        this.lineCount = lineCount;
        this.createCode();
    }
 
 
    public void createCode() {
        int x, fontHeight, codey;
        x = width / (codeCount + 2);
        fontHeight = height - 2;
        codey = height - 4;
        buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        Graphics2D g = buffImg.createGraphics();
        buffImg = g.getDeviceConfiguration().createCompatibleImage(width, height, Transparency.TRANSLUCENT);
        g.dispose();
        g = buffImg.createGraphics();
        g.fillRect(128, 128, width, height);
        Random random = new Random();
        Font font = new Font("微軟雅黑", Font.PLAIN, fontHeight);
        g.setFont(font);
        for (int i = 0; i < lineCount; i++) {
            int xs = random.nextInt(width);
            int ys = random.nextInt(height);
            int xe = xs + random.nextInt(width / 8);
            int ye = ys + random.nextInt(height / 8);
            g.setColor(getRandomColor());
            g.drawLine(xs, ys, xe, ye);
        }
        StringBuilder randomCode = new StringBuilder();
        for (int i = 0; i < codeCount; i++) {
            String strRand = String.valueOf(codeSequence[random.nextInt(codeSequence.length)]);
            g.setColor(getRandomColor());
            g.drawString(strRand, (i + 1) * x, codey);
            randomCode.append(strRand);
        }
        code = randomCode.toString();
    }
 
    private Color getRandomColor(){
        Random random = new Random();
        return new Color(random.nextInt(255), random.nextInt(255), random.nextInt(255));
    }
 
 
    public void write(String path) throws IOException {
        OutputStream sos = new FileOutputStream(path);
        this.write(sos);
    }
 
 
    public void write(OutputStream sos) throws IOException {
        ImageIO.write(buffImg, "png", sos);
        sos.close();
    }
 
 
    public BufferedImage getBuffImg() {
        return buffImg;
    }
 
 
    public String getCode() {
        return code;
    }
 
    public static void main(String[] args) {
        ValidateCode vCode = new ValidateCode(160, 40, 4, 60);
        try {
            String path = "F:/test/images/" + System.currentTimeMillis() + ".png";
            FileOutputStream fileOutputStream = new FileOutputStream(new File(path));
            vCode.write(fileOutputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

效果如下

到此這篇關于Java后端實現(xiàn)生成驗證碼圖片的示例代碼的文章就介紹到這了,更多相關Java生成驗證碼圖片內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 使用axios和spring?boot?交互及使用步驟

    使用axios和spring?boot?交互及使用步驟

    Axios是一個基于Promise的HTTP庫,可以發(fā)送get、post等請求,它作用于瀏覽器和Node.js中,這篇文章主要介紹了使用axios和spring?boot?交互及使用步驟,需要的朋友可以參考下
    2025-06-06
  • 消息隊列-kafka消費異常問題

    消息隊列-kafka消費異常問題

    這篇文章主要給大家介紹了關于kafka的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-07-07
  • 用JAVA實現(xiàn)楊輝三角實例

    用JAVA實現(xiàn)楊輝三角實例

    大家好,本篇文章主要講的是用JAVA實現(xiàn)楊輝三角實例,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • Java實現(xiàn)簡單猜數(shù)字小游戲

    Java實現(xiàn)簡單猜數(shù)字小游戲

    這篇文章主要為大家詳細介紹了Java實現(xiàn)猜數(shù)字游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • 使用Java發(fā)送帶附件的附件的示例

    使用Java發(fā)送帶附件的附件的示例

    這篇文章主要介紹了使用Java發(fā)送帶附件的附件的方法,使用到了JavaMail這個API,需要的朋友可以參考下
    2015-11-11
  • MyBatis-Plus進行分頁查詢優(yōu)化的實踐指南

    MyBatis-Plus進行分頁查詢優(yōu)化的實踐指南

    在實際開發(fā)中,分頁查詢是常見的需求,尤其是需要關聯(lián)其他表獲取額外信息的場景,本文將介紹如何使用 MyBatis-Plus 進行高效分頁查詢,并結合關聯(lián)查詢優(yōu)化數(shù)據(jù)填充,需要的可以了解下
    2025-07-07
  • Java中的WebSocket與實時通信詳解

    Java中的WebSocket與實時通信詳解

    本文介紹WebSocket的概念、工作原理及Java中實現(xiàn)WebSocket的技術手段,包括JavaAPIforWebSocket(JSR356)和SpringWebSocket,通過實際應用場景(如即時聊天、實時通知、在線游戲)進行了詳細分析,展示了WebSocket在現(xiàn)代Web應用中的重要性,感興趣的朋友跟隨小編一起看看吧
    2025-11-11
  • Spring?Boot與Redis的緩存一致性問題解決

    Spring?Boot與Redis的緩存一致性問題解決

    在使用緩存時,緩存一致性問題是一個常見的挑戰(zhàn),本文主要介紹了Spring?Boot與Redis的緩存一致性問題,具有一定的參考價值,感興趣的可以了解一下
    2024-07-07
  • Java?Jenkins、Dockers和Kubernetes有什么區(qū)別詳細總結

    Java?Jenkins、Dockers和Kubernetes有什么區(qū)別詳細總結

    這篇文章主要介紹了Java?Jenkins、Dockers和Kubernetes有什么區(qū)別的相關資料,Jenkins、Docker和Kubernetes分別在自動化流程、容器化封裝與容器編排三個關鍵層面發(fā)揮著重要作用,需要的朋友可以參考下
    2025-11-11
  • Java Predicate接口源碼使用示例

    Java Predicate接口源碼使用示例

    Java8引入了許多函數(shù)式接口(Functional Interface),Predicate(斷言)就是其中一個,它的主要作用可以簡單描述為:向其傳入一個對象(可以理解為參數(shù)),將得到一個布爾值作為輸出,這篇文章主要介紹了Java Predicate接口源碼使用示例,需要的朋友可以參考下
    2025-04-04

最新評論

侯马市| 柳林县| 阳江市| 布尔津县| 台中市| 台安县| 宣城市| 仙游县| 宁乡县| 龙海市| 宣化县| 丰都县| 二连浩特市| 伊吾县| 苏州市| 页游| 宾川县| 宁都县| 祁阳县| 图木舒克市| 即墨市| 安化县| 安阳县| 冷水江市| 呼图壁县| 乐业县| 普格县| 滦平县| 互助| 正镶白旗| 诏安县| 富锦市| 历史| 东阳市| 常山县| 锡林浩特市| 应城市| 洛宁县| 太原市| 康保县| 贺州市|