最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java實(shí)現(xiàn)動(dòng)態(tài)驗(yàn)證碼

 更新時(shí)間:2021年03月04日 17:43:06   作者:iqqcode  
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)動(dòng)態(tài)驗(yàn)證碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

java動(dòng)態(tài)實(shí)現(xiàn)驗(yàn)證碼,供大家參考,具體內(nèi)容如下

【實(shí)現(xiàn)效果】

  • 點(diǎn)擊圖片或者文字可以更換驗(yàn)證碼
  • 驗(yàn)證碼隨機(jī)生成,由大小寫字母和數(shù)字組成
  • 驗(yàn)證碼字體顏色隨機(jī)生成,字母角度有偏轉(zhuǎn)
  • 干擾線隨機(jī)分布

驗(yàn)證碼的功能: 防止惡意的表單注冊

VerificationCode.java 驗(yàn)證碼功能實(shí)現(xiàn)

package com.iqqcode.servlet.checkcode;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;

/**
 * @Author: Mr.Q
 * @Date: 2020-02-12 10:12
 * @Description:驗(yàn)證碼生成
 */
@WebServlet("/VerificationCode")
public class VerificationCode extends HttpServlet {
 @Override
 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 int width = 120;
 int height = 50;

 //1.創(chuàng)建對象,驗(yàn)證碼圖片對象
 BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

 //2.美化圖片
 //2.1填充背景色
 //Graphics g = image.getGraphics();
 Graphics2D g = (Graphics2D) image.getGraphics();//畫筆對象,2D來旋轉(zhuǎn)驗(yàn)證碼字母
 g.setColor(Color.WHITE);//設(shè)置畫筆顏色
 g.fillRect(0, 0, width, height);

 //2.2畫邊框
 g.setColor(Color.BLUE);
 g.drawRect(0, 0, width - 1, height - 1);

 //2.3生成驗(yàn)證碼
 String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
 //生成隨機(jī)角標(biāo)
 Random random = new Random();
 //改變字體
 g.setFont(new Font("宋體",Font.BOLD,35));

 //將驗(yàn)證碼偏轉(zhuǎn)并寫到畫布上
 for (int i = 1; i <= 4; i++) {
 int x = width/5 * i;
 int y = height/2;
 String msg = "";
 int index = random.nextInt(str.length());
 //獲取字符
 char ch = str.charAt(index);//隨機(jī)字符
 //獲取正負(fù)30的角度
 int angle = random.nextInt(60) - 30;
 double radian = angle * Math.PI/180;
 //設(shè)置驗(yàn)證碼中的字體顏色
 //g.setColor(Color.BLUE);
 int red = 0; int green = 0; int blue = 0;
 int codeY = 32;
 // 得到隨機(jī)產(chǎn)生的驗(yàn)證碼數(shù)字
 // 產(chǎn)生隨機(jī)的顏色分量來構(gòu)造顏色值,使輸出的每位數(shù)字的顏色值都不同
 red = random.nextInt(255);
 green = random.nextInt(255);
 blue = random.nextInt(255);
 // 用隨機(jī)產(chǎn)生的顏色將驗(yàn)證碼繪制到圖像中
 g.setColor(new Color(red, green, blue));
 //寫驗(yàn)證碼
 g.rotate(radian, x, y);
 //把字母畫在畫布上
 //g.drawString(ch+"", x, y);
 g.drawString(String.valueOf(ch)+"", x, codeY);
 //把每次旋轉(zhuǎn)的再旋轉(zhuǎn)回來
 g.rotate(-radian, x, y);
 //每次向右移動(dòng)20像素
 x += 15;
 msg += ch;
 }

 //2.4隨機(jī)產(chǎn)生20條干擾線,使圖象中的認(rèn)證碼不易被其它程序探測到
 g.setColor(Color.MAGENTA);
 //隨機(jī)生成坐標(biāo)點(diǎn)
 for (int i = 0; i < 20; i++) {
 int x1 = random.nextInt(width);
 int x2 = random.nextInt(width);
 int y1 = random.nextInt(height);
 int y2 = random.nextInt(height);
 g.drawLine(x1, x2, y1, y2);
 }

 //3.將圖片輸出到頁面展示
 //將圖片對象寫入流中
 ImageIO.write(image, "jpg", response.getOutputStream());
 }

 @Override
 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 this.doPost(request, response);
 }
}

insex.jsp 前臺(tái)頁面展示

分析:

  • 點(diǎn)擊超鏈接或者圖片,需要換一張
  • 給超鏈接和圖片綁定單擊事件
  • 重新設(shè)置圖片的src屬性值

生成的圖片先要緩存在本地,每次請求是不會(huì)修改,所以驗(yàn)證碼圖片不會(huì)切換;
將圖片路徑后添加時(shí)間戳,通過錯(cuò)誤的路徑來欺騙服務(wù)器重新請求

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
 <title>驗(yàn)證碼</title>
 <script>
 window.onload = function () {
 //1.獲取圖片對象
 var img = document.getElementById("checkCode");
 //2.綁定圖片單擊事件
 img.onclick = function () {
 //加時(shí)間戳
 var date = new Date().getTime();
 //加時(shí)間戳,防止瀏覽器利用緩存
 img.src = "/ServletResponse/VerificationCode?" + date;
 }
 //綁定鏈接點(diǎn)擊事件
 var ahref = document.getElementById("change");
 ahref.onclick = function () {
 var date = new Date().getTime();
 img.src = "/ServletResponse/VerificationCode?" + date;
 }
 }
 </script>
</head>
<body>
<h2>驗(yàn)證碼動(dòng)態(tài)實(shí)現(xiàn)</h2>
<img id="checkCode" src="/ServletResponse/VerificationCode">
<a id="change" href="">看不清?換一張</a>
</body>
</html>

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • spring中的事務(wù)執(zhí)行流程圖解

    spring中的事務(wù)執(zhí)行流程圖解

    這篇文章主要介紹了spring中的事務(wù)執(zhí)行流程圖解,Spring事務(wù)是Spring框架提供的一種管理數(shù)據(jù)庫事務(wù)的機(jī)制,它通過將一系列數(shù)據(jù)庫操作封裝在一個(gè)事務(wù)中,保證這些操作要么全部成功執(zhí)行,要么全部回滾,從而確保數(shù)據(jù)的一致性和完整性,需要的朋友可以參考下
    2023-10-10
  • Spring中的依賴注入DI源碼詳細(xì)解析

    Spring中的依賴注入DI源碼詳細(xì)解析

    這篇文章主要介紹了Spring中的依賴注入DI源碼詳細(xì)解析,Spring的依賴注入(Dependency Injection,DI)是Spring框架核心的一部分,它是實(shí)現(xiàn)控制反轉(zhuǎn)(Inversion of Control,IoC)的一種方式,需要的朋友可以參考下
    2023-11-11
  • 使用Spring由構(gòu)造方法自動(dòng)裝配

    使用Spring由構(gòu)造方法自動(dòng)裝配

    這篇文章主要介紹了使用Spring由構(gòu)造方法自動(dòng)裝配,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Flask接口如何返回JSON格式數(shù)據(jù)自動(dòng)解析

    Flask接口如何返回JSON格式數(shù)據(jù)自動(dòng)解析

    這篇文章主要介紹了Flask接口如何返回JSON格式數(shù)據(jù)自動(dòng)解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Java中Boolean引發(fā)缺陷的解決

    Java中Boolean引發(fā)缺陷的解決

    本文主要介紹了Java中Boolean引發(fā)缺陷的解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Maven構(gòu)建Hadoop項(xiàng)目的實(shí)踐步驟

    Maven構(gòu)建Hadoop項(xiàng)目的實(shí)踐步驟

    本文主要介紹了Maven構(gòu)建Hadoop項(xiàng)目的實(shí)踐步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • 5個(gè)主流的Java開源IDE工具詳解

    5個(gè)主流的Java開源IDE工具詳解

    這篇文章主要介紹了5個(gè)主流的Java開源IDE工具,無論如何,Java在當(dāng)今使用的編程語言中始終排在前三名,在TIOBE索引中涉及700萬到1000萬的程序員和開發(fā)者
    2020-07-07
  • springboot配置項(xiàng)目啟動(dòng)后自動(dòng)打開瀏覽器訪問項(xiàng)目方式

    springboot配置項(xiàng)目啟動(dòng)后自動(dòng)打開瀏覽器訪問項(xiàng)目方式

    這篇文章主要介紹了springboot配置項(xiàng)目啟動(dòng)后自動(dòng)打開瀏覽器訪問項(xiàng)目方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • 詳解Java注解實(shí)現(xiàn)自己的ORM

    詳解Java注解實(shí)現(xiàn)自己的ORM

    這篇文章主要介紹了Java注解實(shí)現(xiàn)自己的ORM知識(shí),本文通過示例代碼給大家講解的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2022-10-10
  • fastjson生成json時(shí)Null屬性不顯示的解決方法

    fastjson生成json時(shí)Null屬性不顯示的解決方法

    下面小編就為大家?guī)硪黄猣astjson生成json時(shí)Null屬性不顯示的解決方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-02-02

最新評論

威宁| 涟源市| 宜兰县| 甘德县| 聂荣县| 漠河县| 通城县| 抚顺市| 马鞍山市| 郎溪县| 商河县| 镇原县| 德阳市| 来宾市| 天峻县| 张家界市| 垫江县| 锦屏县| 永清县| 翁牛特旗| 仙桃市| 大同县| 拉萨市| 札达县| 福泉市| 茂名市| 沾益县| 墨江| 高阳县| 军事| 泰安市| 潼关县| 南澳县| 衡阳市| 阜新市| 湟中县| 南丰县| 海兴县| 雷山县| 建昌县| 奉化市|