<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      「Java工具類」驗證碼工具類java生成驗證碼工具類

      介紹語

      本號主要是Java常用關鍵技術點,通用工具類的分享;以及springboot+springcloud+Mybatisplus+druid+mysql+redis+swagger+maven+docker等集成框架的技術分享;datax、kafka、flink等大數據處理框架的技術分享。文章會不斷更新,歡迎碼友關注點贊收藏轉發!

      望各位碼友點擊關注,沖1000粉。后面會錄制一些視頻教程,圖文和視頻結合,比如:圖書介紹網站系統、搶購系統、大數據中臺系統等。技術才是程序猿的最愛,碼友們沖啊

      如果碼友覺得代碼太長,可以從頭到尾快速掃射一遍,了解大概即可。覺得有用后再轉發收藏,以備不時之需。

      正文:

      在登錄中頁面為什么需要一個驗證碼?裝比唄,哈哈哈。你信嗎?我整理了下自己用的驗證碼工具類,碼友們可以直接使用,也可以進一步改進優化,再用于自己的項目中。

      程序員不會表達,直接上干貨把。

      使用例子1

      直接保存驗證碼圖片到本地

      使用例子2

      模擬瀏覽器獲取驗證碼和校驗驗證碼

       

      工具類源碼:

      import org.slf4j.Logger;
       import org.slf4j.LoggerFactory;
       ?
       import javax.imageio.ImageIO;
       import javax.servlet.http.HttpServletResponse;
       import java.awt.*;
       import java.awt.image.BufferedImage;
       import java.io.FileNotFoundException;
       import java.io.FileOutputStream;
       import java.io.IOException;
       import java.util.Random;
       ?
       /**
        * 驗證碼工具類
        *
        * @author liangxn
        */
       public class VerifyCodeUtil {
       ?
           private static final Logger LOGGER = LoggerFactory.getLogger(VerifyCodeUtil.class);
           private final int width = 200;
           private final int height = 80;
           private BufferedImage codeImg;
           private final StringBuilder sb = new StringBuilder();
           private final Random random = new Random();
           private final Color bgColor = new Color(255, 255, 255);
           private final String[] fontsName = {"宋體", "華文楷體", "黑體", "華文新魏", "華文隸書", "微軟雅黑", "楷體_GB2312"};
       ?
           /**
            * 生成code(第一步調用)
            */
           public void generateCode(){
               codeImg = addCharAndLine();
           }
       ?
           /**
            * 獲取驗證碼的值
            *
            * @return
            */
           public String getText() {
               return sb.toString();
           }
       ?
           /**
            * 直接將驗證碼返回到瀏覽器
            *
            * @param response
            */
           public void writeCodeToRespone(HttpServletResponse response) {
               try {
                   // 設置輸出流
                   response.setContentType("image/jpeg");
                   response.setHeader("Pragma", "No-cache");
                   response.setHeader("Cache-Control", "no-cache");
                   response.setDateHeader("Expire", 0);
                   // 寫入輸出流中
                   ImageIO.write(codeImg, "JPEG", response.getOutputStream());
               } catch (FileNotFoundException e) {
                   LOGGER.error("文件未發現異常", e);
               } catch (IOException e) {
                   LOGGER.error("寫驗證碼異常", e);
               }
           }
       ?
           /**
            * 生產驗證碼圖片
            *
            * @return
            */
           public void createVerifyCode(String imageName) {
               String path = imageName + ".jpg";
               try {
                   ImageIO.write(codeImg, "JPEG", new FileOutputStream(path));
               } catch (FileNotFoundException e) {
                   LOGGER.error("文件未發現異常", e);
               } catch (IOException e) {
                   LOGGER.error("寫驗證碼異常", e);
               }
           }
       ?
           /**
            * 獲取字體
            *
            * @return
            */
           private String getFont() {
               int index = random.nextInt(fontsName.length);
               return fontsName[index];
           }
       ?
           /**
            * 獲取隨機字符
            *
            * @return
            */
           private String getChar() {
               String codes = "0123456789abcdefghjklmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ";
               int index = random.nextInt(codes.length());
               return codes.charAt(index) + "";
           }
       ?
           /**
            * 獲取字體顏色
            *
            * @return
            */
           private Color getColor() {
               int red = random.nextInt(150);
               int green = random.nextInt(150);
               int blue = random.nextInt(150);
               return new Color(red, green, blue);
           }
       ?
           /**
            * 生成圖片緩存
            *
            * @return
            */
           private BufferedImage getBufferedImage() {
               BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
               Graphics2D pen = (Graphics2D) bi.getGraphics();
               pen.setColor(this.bgColor);
               pen.fillRect(0, 0, width, height);
               return bi;
           }
       ?
           /**
            * 給驗證碼圖片畫字符和干擾線(包含有字符和線)
            *
            * @return
            */
           private BufferedImage addCharAndLine() {
               BufferedImage bi = getBufferedImage();
               Graphics2D pen = (Graphics2D) bi.getGraphics();
               // 把驗證碼畫到圖片上
               for (int i = 0; i < 4; i++) {
                   String font = getFont();
                   // 生成隨機的樣式, 0(無樣式), 1(粗體), 2(斜體), 3(粗體+斜體)
                   int style = random.nextInt(4);
                   pen.setColor(getColor());
                   int fontSize = 70;
                   pen.setFont(new Font(font, style, fontSize));
                   String s = getChar();
                   sb.append(s);
                   pen.drawString(s, 10 + i * 50, 65);
               }
       ?
               // 畫3條干擾線
               int lineNumber = 3;
               pen.setColor(Color.BLUE);
               pen.setStroke(new BasicStroke(1.5F, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER));
               for (int i = 0; i < lineNumber; i++) {
                   int x1 = random.nextInt(width);
                   int y1 = random.nextInt(height);
                   int x2 = random.nextInt(width);
                   int y2 = random.nextInt(height);
                   pen.drawLine(x1, y1, x2, y2);
               }
               return bi;
           }
       }

      鄙人編碼十年多,在項目中也積累了一些工具類,很多工具類在每個項目都有在用,很實用。大部分是鄙人封裝的,有些工具類是同事封裝的,有些工具類已經不記得是ctrl+c的還是自己封裝的了,現在有空就會總結項目中大部分的工具類,分享給各位碼友。如果文章中涉及的代碼有侵權行為請通知鄙人處理。

      計劃是先把工具類整理出來,正所謂工欲善其事,必先利其器。項目中不管是普通單體項目還是多模塊maven項目或是分布式微服務,一部分功能模塊都是可以重用的,工具類模塊就是其中之一。

      posted @ 2021-11-10 23:43  Java夜未眠  閱讀(141)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 色狠狠色婷婷丁香五月| 国产另类ts人妖一区二区| 97人妻中文字幕总站| 国产精品欧美亚洲韩国日本久久| 日韩av天堂综合网久久| 亚洲国产欧美一区二区好看电影| 国产欧美日韩va另类在线播放| 久99久热精品免费视频| 久久精品久久精品久久精品| 久久久无码精品国产一区| 熟女少妇精品一区二区| 亚洲一品道一区二区三区| 欧乱色国产精品兔费视频| 平远县| 九九热在线免费观看视频| 亚洲理论在线A中文字幕| 最新永久免费AV无码网站| XXXXXHD亚洲日本HD| 国产成人精品亚洲午夜麻豆| 亚洲伊人久久综合影院| 在线免费成人亚洲av| 国产综合久久久久鬼色| 国产精品天天看天天狠| 欧美成人猛片aaaaaaa| 国产精品综合av一区二区| 成人国产精品三上悠亚久久| 婷婷四虎东京热无码群交双飞视频| 亚洲码国产精品高潮在线| 日韩精品卡1卡2日韩在线| 国产精品高潮无码毛片| 亚洲精品国模一区二区| 亚洲国产成人午夜在线一区| 99久久精品视香蕉蕉| 久久人人97超碰人人澡爱香蕉| 青青青爽在线视频观看| 精品久久精品午夜精品久久| 日本精品不卡一二三区| 四虎影视永久在线精品| 国产69精品久久久久人妻| 一区二区三区精品不卡| 顶级欧美熟妇xx|