Java製作驗證碼的完整程式碼
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, 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);
}
}
相關文章
- 某滑塊驗證碼識別思路(附完整程式碼)
- 用Python製作圖片驗證碼,這三行程式碼完事兒Python行程
- Java驗證碼—ValidateCode的使用Java
- volatile的特性程式碼驗證
- 表白程式碼製作(附原始碼)原始碼
- java之使用Servlet生成驗證碼的原始碼分享JavaServlet原始碼
- 驗證碼簡訊 API 接入指南:Java 語言示例程式碼APIJava
- 使用F#破解滑塊驗證碼的完整流程
- java圖形驗證碼實現Java
- 驗證碼---js重新整理驗證碼JS
- 使用Go語言破解滑塊驗證碼的完整流程Go
- 短視訊app製作,驗證碼輸入時間倒數計時APP
- 第二次實驗完整程式碼
- 驗證碼原理及驗證
- 常見驗證碼的弱點與驗證碼識別
- Java和Python:程式碼作戰JavaPython
- 學習 Java 之 位元組碼驗證Java
- Java實現郵箱驗證碼功能Java
- 驗證碼機制之驗證碼重複使用
- 登入驗證碼生成kaptcha(輸入驗證碼)APT
- 影片直播app原始碼,傳送驗證碼 驗證碼識別APP原始碼
- 《神經網路的梯度推導與程式碼驗證》之LSTM前向和反向傳播的程式碼驗證神經網路梯度反向傳播
- 使用 DartPad 製作程式碼實踐教程Dart
- 學會用程式碼製作愛心!
- 坑爹的驗證碼。。
- Laravel - 驗證碼Laravel
- Response驗證碼
- PHP驗證碼PHP
- 四千行程式碼寫的桌面作業系統GrapeOS完整程式碼開源了行程作業系統
- 直播平臺搭建原始碼,java相簿製作原始碼Java
- JavaScript 表單驗證程式碼例項JavaScript
- 【驗證碼逆向專欄】某多多驗證碼逆向分析
- 《神經網路的梯度推導與程式碼驗證》之vanilla RNN前向和反向傳播的程式碼驗證神經網路梯度RNN反向傳播
- 程式碼簽名證書是如何進行驗證工作的
- 【總結】Java實現簡訊驗證碼Java
- JavaScript驗證碼生成和驗證效果JavaScript
- 幽默:證明真人的新驗證碼
- 《神經網路的梯度推導與程式碼驗證》之CNN前向和反向傳播過程的程式碼驗證神經網路梯度CNN反向傳播