Java製作驗證碼的完整例項程式碼
阿新 • • 發佈:2020-11-09
JAVA程式碼製作驗證碼,可用於註冊等功能頁面
要匯入servlet-api.jar包
建立驗證碼的Util工具類:
先建立圖片並生成隨機的驗證碼字母
設定圖片的底色,並用setFont函式將驗證碼畫在圖片上,如果想讓驗證碼難一點,可以新增for迴圈的程式碼給圖片增加旋轉角度
給驗證碼增加干擾線,提高安全性
設定邊框
建立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(){ //建立一張圖片 BufferedImage verifyPic = new BufferedImage(120,40,BufferedImage.TYPE_3BYTE_BGR); //通過圖片獲取畫筆 Graphics2D g = verifyPic.createGraphics(); //準備一個字母+數字的字典 String letters = "23456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; //規定驗證碼的位數 int verifyLength = 4; //生成隨機驗證碼 String verifyCode = ""; //迴圈取值 for(int i=0; i<verifyLength; i++) { verifyCode +=letters.charAt((int)(Math.random()*letters.length())); } //將圖片的底板由黑變白 g.setColor(Color.white); g.fillRect(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,20); } //加入干擾線 for (int i = 0; i < 5; i++) { //給隨機顏色 g.setColor(new Color((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,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,IOException { doGet(request,response); } }
總結
到此這篇關於Java製作驗證碼的完整例項程式碼的文章就介紹到這了,更多相關Java驗證碼完整程式碼內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!