Java制作驗證碼的完整實例代碼
JAVA代碼制作驗證碼,可用于注冊等功能頁面
要導入servlet-api.jar包
創(chuàng)建驗證碼的Util工具類:
先創(chuàng)建圖片并生成隨機的驗證碼字母

設置圖片的底色,并用setFont函數將驗證碼畫在圖片上,如果想讓驗證碼難一點,可以添加for循環(huán)的代碼給圖片增加旋轉角度

給驗證碼增加干擾線,提高安全性

設置邊框

創(chuàng)建VerifyPic的servlet,通過Util類獲取代碼,并存入session中,然后輸送去前端頁面

前端頁面驗證碼如下:

完整Util工具類代碼如下:
package com.sport.util;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.util.HashMap;
import java.util.Map;
public class VerifyUtil {
public static Map<String, Object> generateVerify(){
//創(chuàng)建一張圖片
BufferedImage verifyPic = new BufferedImage(120,40,BufferedImage.TYPE_3BYTE_BGR);
//通過圖片獲取畫筆
Graphics2D g = verifyPic.createGraphics();
//準備一個字母+數字的字典
String letters = "23456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
//規(guī)定驗證碼的位數
int verifyLength = 4;
//生成隨機驗證碼
String verifyCode = "";
//循環(huán)取值
for(int i=0; i<verifyLength; i++) {
verifyCode +=letters.charAt((int)(Math.random()*letters.length()));
}
//將圖片的底板由黑變白
g.setColor(Color.white);
g.fillRect(0, 0, 120, 40);
//將驗證碼畫在圖片之上
g.setFont(new Font("微軟雅黑",Font.BOLD, 24));
for (int i = 0; i < verifyLength; i++) {
//隨機產生一個角度
double theta = Math.random() * Math.PI / 4 * ((int)(Math.random()*2) == 0?1:-1);
//產生偏轉
g.rotate(theta, 24+i*22, 20);
//每畫一個字幕之前都隨機給一個顏色
g.setColor(new Color((int)(Math.random()*256), (int)(Math.random()*256), (int)(Math.random()*256)));
g.drawString(verifyCode.charAt(i)+"", 20+i*22 , 26);
//回正
g.rotate(-theta, 24+i*22, 20);
}
//加入干擾線
for (int i = 0; i < 5; i++) {
//給隨機顏色
g.setColor(new Color((int)(Math.random()*256), (int)(Math.random()*256), (int)(Math.random()*256)));
//畫線
g.drawLine((int)(Math.random()*120), (int)(Math.random()*40),
(int)(Math.random()*120), (int)(Math.random()*40));
}
//設置邊框顏色
g.setColor(Color.black);
//給驗證碼一個外邊框
g.drawRect(0, 0, 118, 38);
//將驗證碼和圖片一起存入map
Map<String, Object> data = new HashMap<String, Object>();
data.put("verifyCode", verifyCode);
data.put("verifyPic", verifyPic);
return data;
}
}
完整VerifyPic的代碼如下:
package com.sport.servlet;
import com.sport.util.VerifyUtil;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Map;
@WebServlet("/VerifyPic")
public class VerifyPic extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Map<String, Object> data = VerifyUtil.generateVerify();
//獲取驗證碼
String verifyCode = (String) data.get("verifyCode");
//將驗證碼存入session
HttpSession session = request.getSession();
session.setAttribute("verifyCode", verifyCode);
//獲取圖片
BufferedImage verifyPic = (BufferedImage) data.get("verifyPic");
//輸出圖片給前端,使用工具類ImageIO
ImageIO.write(verifyPic, "jpg", response.getOutputStream());
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
總結
到此這篇關于Java制作驗證碼的完整實例代碼的文章就介紹到這了,更多相關Java驗證碼完整代碼內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
利用Java多線程技術導入數據到Elasticsearch的方法步驟
這篇文章主要介紹了利用Java多線程技術導入數據到Elasticsearch的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-07-07
Spring Boot如何使用Spring Security進行安全控制
要實現訪問控制的方法多種多樣,可以通過Aop、攔截器實現,也可以通過框架實現,本文將具體介紹在Spring Boot中如何使用Spring Security進行安全控制。2017-04-04
java實戰(zhàn)案例之用戶注冊并發(fā)送郵件激活/發(fā)送郵件驗證碼
現在很多的網站都提供有用戶注冊功能,當我們注冊成功之后就會收到封注冊網站的郵件,郵件里包含了我們的注冊的用戶名和密碼及激活賬戶的超鏈接等信息,這篇文章主要給大家介紹了關于java實戰(zhàn)案例之用戶注冊并發(fā)送郵件激活/發(fā)送郵件驗證碼的相關資料,需要的朋友可以參考下2021-09-09

