亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

利用Java實現一個驗證碼功能

發布時間:2020-11-07 14:49:06 來源:億速云 閱讀:1662 作者:Leah 欄目:開發技術

今天就跟大家聊聊有關利用Java實現一個驗證碼功能,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

要導入servlet-api.jar包

創建驗證碼的Util工具類:

先創建圖片并生成隨機的驗證碼字母

利用Java實現一個驗證碼功能

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

利用Java實現一個驗證碼功能

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

利用Java實現一個驗證碼功能

設置邊框

利用Java實現一個驗證碼功能

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

利用Java實現一個驗證碼功能

前端頁面驗證碼如下:

利用Java實現一個驗證碼功能

完整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&#63;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實現一個驗證碼功能有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

红原县| 崇州市| 光山县| 思南县| 蓬溪县| 威海市| 高雄县| 连州市| 峨山| 白山市| 施秉县| 汽车| 漯河市| 南充市| 镇康县| 鹤庆县| 抚顺市| 兴安盟| 乌海市| 任丘市| 淳化县| 江安县| 茌平县| 余江县| 鄂托克前旗| 东辽县| 华亭县| 襄樊市| 麻阳| 洞口县| 正镶白旗| 鸡泽县| 双峰县| 清流县| 股票| 宜黄县| 军事| 南丰县| 渝北区| 禄劝| 克什克腾旗|