Java制作驗(yàn)證碼的完整實(shí)例代碼
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è)面
前端頁(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)文章希望大家以后多多支持腳本之家!
- java登錄驗(yàn)證碼實(shí)現(xiàn)代碼
- java 圖片驗(yàn)證碼的實(shí)現(xiàn)代碼
- Java實(shí)現(xiàn)驗(yàn)證碼具體代碼
- Java實(shí)現(xiàn)仿淘寶滑動(dòng)驗(yàn)證碼研究代碼詳解
- Java實(shí)現(xiàn)滑動(dòng)驗(yàn)證碼的示例代碼
- java生成圖片驗(yàn)證碼實(shí)例代碼
- Java web含驗(yàn)證碼及權(quán)限登錄實(shí)例代碼
- 基于JAVA的短信驗(yàn)證碼api調(diào)用代碼實(shí)例
- Java實(shí)現(xiàn)圖片驗(yàn)證碼具體代碼
- Java實(shí)現(xiàn)驗(yàn)證碼具體代碼(圖片、漢字)
相關(guān)文章
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的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07Spring 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簡(jiǎn)單談?wù)凧ava 中的線程的幾種狀態(tài)
這篇文章主要介紹了簡(jiǎn)單談?wù)凧ava 中的線程的幾種狀態(tài)的相關(guān)資料,需要的朋友可以參考下2020-02-02java實(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