「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項目或是分布式微服務,一部分功能模塊都是可以重用的,工具類模塊就是其中之一。

浙公網安備 33010602011771號