使用java怎么實現(xiàn)一個動態(tài)驗證碼功能?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
成都創(chuàng)新互聯(lián)服務項目包括青海網(wǎng)站建設(shè)、青海網(wǎng)站制作、青海網(wǎng)頁制作以及青海網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,青海網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務的客戶以成都為中心已經(jīng)輻射到青海省份的部分城市,未來相信會繼續(xù)擴大服務區(qū)域并繼續(xù)獲得客戶的支持與信任!Java主要應用于:1. web開發(fā);2. Android開發(fā);3. 客戶端開發(fā);4. 網(wǎng)頁開發(fā);5. 企業(yè)級應用開發(fā);6. Java大數(shù)據(jù)開發(fā);7.游戲開發(fā)等。
具體內(nèi)容如下
【實現(xiàn)效果】
點擊圖片或者文字可以更換驗證碼
驗證碼隨機生成,由大小寫字母和數(shù)字組成
驗證碼字體顏色隨機生成,字母角度有偏轉(zhuǎ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; @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)建對象,驗證碼圖片對象 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)驗證碼字母 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生成驗證碼 String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; //生成隨機角標 Random random = new Random(); //改變字體 g.setFont(new Font("宋體",Font.BOLD,35)); //將驗證碼偏轉(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);//隨機字符 //獲取正負30的角度 int angle = random.nextInt(60) - 30; double radian = angle * Math.PI/180; //設(shè)置驗證碼中的字體顏色 //g.setColor(Color.BLUE); int red = 0; int green = 0; int blue = 0; int codeY = 32; // 得到隨機產(chǎn)生的驗證碼數(shù)字 // 產(chǎn)生隨機的顏色分量來構(gòu)造顏色值,使輸出的每位數(shù)字的顏色值都不同 red = random.nextInt(255); green = random.nextInt(255); blue = random.nextInt(255); // 用隨機產(chǎn)生的顏色將驗證碼繪制到圖像中 g.setColor(new Color(red, green, blue)); //寫驗證碼 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); //每次向右移動20像素 x += 15; msg += ch; } //2.4隨機產(chǎn)生20條干擾線,使圖象中的認證碼不易被其它程序探測到 g.setColor(Color.MAGENTA); //隨機生成坐標點 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); } }
分析:
點擊超鏈接或者圖片,需要換一張
給超鏈接和圖片綁定單擊事件
重新設(shè)置圖片的src屬性值
生成的圖片先要緩存在本地,每次請求是不會修改,所以驗證碼圖片不會切換;
將圖片路徑后添加時間戳,通過錯誤的路徑來欺騙服務器重新請求
<%@ page contentType="text/html;charset=UTF-8" language="java" %>驗證碼 驗證碼動態(tài)實現(xiàn)
看不清?換一張
看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進一步的了解或閱讀更多相關(guān)文章,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司,的支持。