欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java制作驗(yàn)證碼的完整實(shí)例代碼

 更新時(shí)間:2020年11月06日 12:09:16   作者:不會(huì)禿頭的猿  
這篇文章主要給大家介紹了關(guān)于Java制作驗(yàn)證碼的完整實(shí)例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

JAVA代碼制作驗(yàn)證碼,可用于注冊(cè)等功能頁(yè)面

要導(dǎo)入servlet-api.jar包

創(chuàng)建驗(yàn)證碼的Util工具類:

先創(chuàng)建圖片并生成隨機(jī)的驗(yàn)證碼字母

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

給驗(yàn)證碼增加干擾線,提高安全性

設(shè)置邊框

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

實(shí)打

前端頁(yè)面驗(yàn)證碼如下:

完整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);
  //通過(guò)圖片獲取畫筆
  Graphics2D g = verifyPic.createGraphics();
  //準(zhǔn)備一個(gè)字母+數(shù)字的字典
  String letters = "23456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
  //規(guī)定驗(yàn)證碼的位數(shù)
  int verifyLength = 4;
  //生成隨機(jī)驗(yàn)證碼
  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);
  //將驗(yàn)證碼畫在圖片之上
  g.setFont(new Font("微軟雅黑",Font.BOLD, 24));
  for (int i = 0; i < verifyLength; i++) {
   //隨機(jī)產(chǎn)生一個(gè)角度
   double theta = Math.random() * Math.PI / 4 * ((int)(Math.random()*2) == 0?1:-1);
   //產(chǎn)生偏轉(zhuǎn)
   g.rotate(theta, 24+i*22, 20);
   //每畫一個(gè)字幕之前都隨機(jī)給一個(gè)顏色
   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++) {
   //給隨機(jī)顏色
   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));
  }
  //設(shè)置邊框顏色
  g.setColor(Color.black);
  //給驗(yàn)證碼一個(gè)外邊框
  g.drawRect(0, 0, 118, 38);

  //將驗(yàn)證碼和圖片一起存入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();
  //獲取驗(yàn)證碼
  String verifyCode = (String) data.get("verifyCode");
  //將驗(yàn)證碼存入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);
 }
}

總結(jié)

到此這篇關(guān)于Java制作驗(yàn)證碼的完整實(shí)例代碼的文章就介紹到這了,更多相關(guān)Java驗(yàn)證碼完整代碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳談Java中的二進(jìn)制及基本的位運(yùn)算

    詳談Java中的二進(jìn)制及基本的位運(yùn)算

    下面小編就為大家?guī)?lái)一篇詳談Java中的二進(jìn)制及基本的位運(yùn)算。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-07-07
  • SpringBoot項(xiàng)目微信云托管入門部署實(shí)踐

    SpringBoot項(xiàng)目微信云托管入門部署實(shí)踐

    本文主要介紹了SpringBoot項(xiàng)目微信云托管入門部署實(shí)踐,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 利用Java多線程技術(shù)導(dǎo)入數(shù)據(jù)到Elasticsearch的方法步驟

    利用Java多線程技術(shù)導(dǎo)入數(shù)據(jù)到Elasticsearch的方法步驟

    這篇文章主要介紹了利用Java多線程技術(shù)導(dǎo)入數(shù)據(jù)到Elasticsearch的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Java判斷所給年份是平年還是閏年

    Java判斷所給年份是平年還是閏年

    這篇文章主要為大家詳細(xì)介紹了Java判斷所給年份是平年還是閏年,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Java如何從json字符串中獲取某個(gè)值詳解

    Java如何從json字符串中獲取某個(gè)值詳解

    Java開發(fā)當(dāng)中經(jīng)常需要Json格式的數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于Java如何從json字符串中獲取某個(gè)值的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • Spring Boot如何使用Spring Security進(jìn)行安全控制

    Spring Boot如何使用Spring Security進(jìn)行安全控制

    要實(shí)現(xiàn)訪問(wèn)控制的方法多種多樣,可以通過(guò)Aop、攔截器實(shí)現(xiàn),也可以通過(guò)框架實(shí)現(xiàn),本文將具體介紹在Spring Boot中如何使用Spring Security進(jìn)行安全控制。
    2017-04-04
  • springboot 多環(huán)境配置教程

    springboot 多環(huán)境配置教程

    這篇文章主要介紹了springboot 常用配置之多環(huán)境配置,需要的朋友可以參考下
    2018-04-04
  • 簡(jiǎn)單談?wù)凧ava 中的線程的幾種狀態(tài)

    簡(jiǎn)單談?wù)凧ava 中的線程的幾種狀態(tài)

    這篇文章主要介紹了簡(jiǎn)單談?wù)凧ava 中的線程的幾種狀態(tài)的相關(guān)資料,需要的朋友可以參考下
    2020-02-02
  • Java?9中的"菱形"語(yǔ)法詳解

    Java?9中的"菱形"語(yǔ)法詳解

    Java?9?再次增強(qiáng)了“菱形”語(yǔ)法,它甚至允許在創(chuàng)建匿名內(nèi)部類時(shí)使用菱形語(yǔ)法,Java?可根據(jù)上下文來(lái)推斷匿名內(nèi)部類中泛型的類型,下面程序示范了在匿名內(nèi)部類中使用菱形語(yǔ)法,感興趣的朋友跟隨小編一起看看吧
    2023-06-06
  • java實(shí)戰(zhàn)案例之用戶注冊(cè)并發(fā)送郵件激活/發(fā)送郵件驗(yàn)證碼

    java實(shí)戰(zhàn)案例之用戶注冊(cè)并發(fā)送郵件激活/發(fā)送郵件驗(yàn)證碼

    現(xiàn)在很多的網(wǎng)站都提供有用戶注冊(cè)功能,當(dāng)我們注冊(cè)成功之后就會(huì)收到封注冊(cè)網(wǎng)站的郵件,郵件里包含了我們的注冊(cè)的用戶名和密碼及激活賬戶的超鏈接等信息,這篇文章主要給大家介紹了關(guān)于java實(shí)戰(zhàn)案例之用戶注冊(cè)并發(fā)送郵件激活/發(fā)送郵件驗(yàn)證碼的相關(guān)資料,需要的朋友可以參考下
    2021-09-09

最新評(píng)論