溫馨提示×

溫馨提示×

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

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

Java如何實現(xiàn)驗證碼生成

發(fā)布時間:2021-08-15 08:36:24 來源:億速云 閱讀:245 作者:小新 欄目:編程語言

這篇文章主要介紹了Java如何實現(xiàn)驗證碼生成,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

驗證碼大家都知道,它的作用也不用我多說了吧。如果不太清楚請參見百度百科中的解釋,一般驗證碼的生成就是隨機產(chǎn)生字符(數(shù)字、字母或者漢字等),然后將這些生成的字符繪制成一張圖片,再在圖片上加上一些干擾元素,如各種線條之類的。好了廢話不多說一起往下看:

Java如何實現(xiàn)驗證碼生成

簡單的登錄頁面(代碼并不完整,只有驗證碼部分)

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
 <head> 
 <title>驗證碼</title> 
 <script type="text/javascript"> 
<span  data-filtered="filtered"></span><span > </span> //刷新驗證碼的js函數(shù) 
<span > </span>function changeCode() { 
<span > </span>var imgNode = document.getElementById("vimg");   
 
<span > </span>//重新加載驗證碼,達到刷新的目的 
<span > </span>imgNode.src = "servlet/AuthImageServlet?t=" + Math.random(); // 防止瀏覽器緩存的問題 
<span > </span>} 
 </script> 
 </head> 
 <body> 
 <form action="checkServlet" method="post"> 
 <label>輸入驗證碼</label><br/> 
 <input type="text" name="randomCode"/><img id="vimg" title="點擊更換" onclick="changeCode();" src="servlet/AuthImageServlet"><br/> 
 <input type="submit" value="submit"> 
 </form> 
 </body> 
</html>

通過session.getAttribute("rand"),獲得生成的驗證碼,然后跟用戶輸入的進行比較,再根據(jù)比較結(jié)果做相應(yīng)的處理。

通過servlet生成驗證碼:

package com.util.servlet; 
 
import java.awt.Color; 
import java.awt.Font; 
import java.awt.Graphics; 
import java.awt.image.BufferedImage; 
import java.io.IOException; 
import java.util.Random; 
 
import javax.imageio.ImageIO; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.http.HttpSession; 
 
public class AuthImageServlet extends HttpServlet { 
 
 private static final String CONTENT_TYPE = "text/html; charset=gb2312"; 
 //設(shè)置字母的大小,大小 
 private Font mFont = new Font("Times New Roman", Font.PLAIN, 17); 
 public void init() throws ServletException 
 { 
 super.init(); 
 } 
 Color getRandColor(int fc,int bc) 
 { 
 Random random = new Random(); 
 if(fc>255) fc=255; 
 if(bc>255) bc=255; 
 int r=fc+random.nextInt(bc-fc); 
 int g=fc+random.nextInt(bc-fc); 
 int b=fc+random.nextInt(bc-fc); 
 return new Color(r,g,b); 
 } 
 
 public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
 { 
 response.setHeader("Pragma","No-cache"); 
 response.setHeader("Cache-Control","no-cache"); 
 response.setDateHeader("Expires", 0); 
 //表明生成的響應(yīng)是圖片 
 response.setContentType("image/jpeg"); 
  
 int width=100, height=18; 
 BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); 
  
 Graphics g = image.getGraphics(); 
 Random random = new Random(); 
 g.setColor(getRandColor(200,250)); 
 g.fillRect(1, 1, width-1, height-1); 
 g.setColor(new Color(102,102,102)); 
 g.drawRect(0, 0, width-1, height-1); 
 g.setFont(mFont); 
 
 g.setColor(getRandColor(160,200)); 
 
 //畫隨機線 
 for (int i=0;i<155;i++) 
 { 
  int x = random.nextInt(width - 1); 
  int y = random.nextInt(height - 1); 
  int xl = random.nextInt(6) + 1; 
  int yl = random.nextInt(12) + 1; 
  g.drawLine(x,y,x + xl,y + yl); 
 } 
 
 //從另一方向畫隨機線 
 for (int i = 0;i < 70;i++) 
 { 
  int x = random.nextInt(width - 1); 
  int y = random.nextInt(height - 1); 
  int xl = random.nextInt(12) + 1; 
  int yl = random.nextInt(6) + 1; 
  g.drawLine(x,y,x - xl,y - yl); 
 } 
 
 //生成隨機數(shù),并將隨機數(shù)字轉(zhuǎn)換為字母 
 String sRand=""; 
 for (int i=0;i<6;i++) 
 { 
  int itmp = random.nextInt(26) + 65; 
  char ctmp = (char)itmp; 
  sRand += String.valueOf(ctmp); 
  g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110))); 
  g.drawString(String.valueOf(ctmp),15*i+10,16); 
 } 
 
 HttpSession session = request.getSession(true); 
 session.setAttribute("rand",sRand); 
 g.dispose(); 
 ImageIO.write(image, "JPEG", response.getOutputStream()); 
 } 
 
}

web.xml中的servlet配置信息:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="2.5" 
 xmlns="http://java.sun.com/xml/ns/javaee" 
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 
 
 <servlet> 
 <servlet-name>AuthImageServlet</servlet-name> 
 <servlet-class>com.util.servlet.AuthImageServlet</servlet-class> 
 </servlet> 
 <servlet-mapping> 
 <servlet-name>AuthImageServlet</servlet-name> 
 <url-pattern>/servlet/AuthImageServlet</url-pattern> 
 </servlet-mapping> 
 
 <welcome-file-list> 
 <welcome-file>index.jsp</welcome-file> 
 </welcome-file-list> 
</web-app>

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“Java如何實現(xiàn)驗證碼生成”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI