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

Java動態(tài)驗證碼單線設(shè)計的兩種方法

 更新時間:2018年07月23日 09:46:37   作者:垂眸愛笑約  
這篇文章主要介紹了Java動態(tài)驗證碼單線設(shè)計的兩種方法,需要的朋友可以參考下

1.java的動態(tài)驗證碼我這里將介紹兩種方法:

一:根據(jù)java本身提供的一種驗證碼的寫法,這種呢只限于大家了解就可以了,因為java自帶的模式編寫的在實際開發(fā)中是沒有意義的,所以只供學(xué)習(xí)一下就可以了,待會講解的第二種呢就是我們需要掌握的一種模式了:

第一種的代碼如下:

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.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
 * Servlet implementation class inde
 */
@WebServlet("/inde")
public class inde extends HttpServlet {
  private static final long serialVersionUID = 1L;
  /**
   * @see HttpServlet#HttpServlet()
   */
  public inde() {
    super();
    // TODO Auto-generated constructor stub
  }
  /**
   * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
   */
  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      this.doPost(request, response);      
  }
  /**動態(tài)生成圖片驗證碼
   * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
   */
  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    //創(chuàng)建圖像
    int width=100;
    int height=40;
    //圖片的大小設(shè)置
    BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
    //創(chuàng)建畫板    
    Graphics g=image.getGraphics();  
     setSquareBackGround(g,width,height,5);
    //確定畫筆顏色
    g.setColor(Color.black);
    //填充矩形
    g.fillRect(0, 0, width, height);
      //在大矩形中放小矩形
      g.setColor(Color.WHITE);
      g.fillRect(1, 1, width-2, height-2);        
    //填充字符
    String str = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM0123456789";
    StringBuffer sb=new StringBuffer();
     //畫隨機干擾框
    setSquareBackGround(g,width,height,3); 
    //畫干擾點
    CreateRandomPoint(width, height,100,g,100);    
    //隨機畫幾條線
    CreateRandomLine(width, height,8,g,100);  
    //隨機獲取4個字符
    Random random=new Random();
    for (int i = 0; i < 4; i++) {
      //62個填充字符里面隨機的隨機的收取字符
      int index=random.nextInt(62);
      //截取一個字符
      String st=str.substring(index, index+1);
      //把字符放到圖片中去
      g.setColor(Color.red);
      //設(shè)置字體
      g.setFont(new Font("宋體",Font.BOLD,30));
      g.drawString(st, 20*i, 30);//防止4個字符在一起
      sb.append(st);
    }
    //把StringBuffer中的驗證碼放到session里面,目的是讓Login調(diào)用
    HttpSession se=request.getSession();
    se.setAttribute("number", sb.toString());
    //發(fā)送圖片到瀏覽器 指定發(fā)送的圖片 和格式
    response.setContentType("image/jpeg");
    //圖片,圖片的格式,輸出的方式
    ImageIO.write(image, "jpg", response.getOutputStream());
  }
  Random rand = new Random();
  private void CreateRandomPoint(int width,int height,int many,Graphics g,int alpha)
  { // 隨機產(chǎn)生干擾點
    for (int i=0;i<many;i++) {
      int x = rand.nextInt(width); 
      int y = rand.nextInt(height); 
      g.setColor(getColor(alpha));
      g.drawOval(x,y,rand.nextInt(3),rand.nextInt(3)); 
    } 
  }
/**
 * 隨機產(chǎn)生干擾線條
 * @param width
 * @param height
 * @param minMany 最少產(chǎn)生的數(shù)量
 * @param g
 * @param alpha 透明度0~255 0表示全透
 */
  private void CreateRandomLine(int width,int height,int minMany,Graphics g,int alpha)
  { // 隨機產(chǎn)生干擾線條
    for (int i=0;i<getIntRandom(minMany, minMany+6);i++) { 
      int x1 =getIntRandom(0,(int)(width*0.6)); 
      int y1 =getIntRandom(0,(int)(height*0.6)); 
      int x2 =getIntRandom((int)(width*0.4),width); 
      int y2 =getIntRandom((int)(height*0.2),height); 
      g.setColor(getColor(alpha));
      g.drawLine(x1, y1, x2, y2);
    } 
  }
  /**
   * 由隨機產(chǎn)生的方塊來作為干擾背景
   */
  private void setSquareBackGround(Graphics g,int width,int height,int count){
    // 隨機產(chǎn)生干擾線條
    for (int i=0;i<getIntRandom(count, count+2);i++) { 
      int x1 =getIntRandom(0,(int)(width*0.3)); 
      int y1 =getIntRandom(0,(int)(height*0.3)); 
      int x2 =getIntRandom((int)(width*0.5),width); 
      int y2 =getIntRandom((int)(height*0.55),height); 
      g.setColor(getColor(100));
      int w=x2-x1;
      int h=y2-y1;
      if(w<0) w=-w;
      if(h<0) h=-h;
      g.drawRect(x1, y1, w, h);
      g.setColor(getColor(25));
      g.fillRect(x1, y1, w, h);
    } 
  }
  private int getIntRandom(double start,double end)
  {  if(end<start)
    {
     double t=end;
     end=start;
     start=t;
    }
    double i=start+(int) (Math.random()*(end-start));
    return (int)i;
  }

上面的代碼呢寫的很詳細(xì)了,這里我就不重復(fù)了,這里的干擾線條是有很多寫法的,我這里就沒有全寫出來,有需要的話可以私聊我哦!

下面介紹第二種:

這種呢是我們開發(fā)中是可以用得到的,使用在的是網(wǎng)頁端的交互,我們在登錄網(wǎng)站的時候有很多的驗證碼就可以用這個來寫了

import java.io.IOException;
import java.util.Random;
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;
/**
 * Servlet implementation class inde
 */
@WebServlet("/inde")
public class inde extends HttpServlet {
  private static final long serialVersionUID = 1L;
  /**
   * @see HttpServlet#HttpServlet()
   */
  public inde() {
    super();
    // TODO Auto-generated constructor stub
  }
  /**
   * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
   */
  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      this.doPost(request, response);      
  }
  /**動態(tài)生成圖片驗證碼
   * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
   */
  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    //創(chuàng)建圖像
    int width=100;
    int height=40;
    //圖片的大小設(shè)置
    BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
    //創(chuàng)建畫板    
    Graphics g=image.getGraphics();  
     setSquareBackGround(g,width,height,5);
    //確定畫筆顏色
    g.setColor(Color.black);
    //填充矩形
    g.fillRect(0, 0, width, height);
      //在大矩形中放小矩形
      g.setColor(Color.WHITE);
      g.fillRect(1, 1, width-2, height-2);        
    //填充字符
    String str = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM0123456789";
    StringBuffer sb=new StringBuffer();
//隨機獲取4個字符
    Random random=new Random();
    for (int i = 0; i < 4; i++) {
      //62個填充字符里面隨機的隨機的收取字符
      int index=random.nextInt(62);
      //截取一個字符
      String st=str.substring(index, index+1);
      //把字符放到圖片中去
      g.setColor(Color.red);
      //設(shè)置字體
      g.setFont(new Font("宋體",Font.BOLD,30));
      g.drawString(st, 20*i, 30);//防止4個字符在一起
      sb.append(st);
    }
//把StringBuffer中的驗證碼放到session里面,目的是讓Login調(diào)用
    HttpSession se=request.getSession();
    se.setAttribute("number", sb.toString());
    //發(fā)送圖片到瀏覽器 指定發(fā)送的圖片 和格式
    response.setContentType("image/jpeg");
    //圖片,圖片的格式,輸出的方式
    ImageIO.write(image, "jpg", response.getOutputStream());
  }

這樣就可以運行了,當(dāng)然了我們可以在這里面加入第一種的干擾模塊給拿過來這樣就可以實現(xiàn)整體的一個效果了。

總結(jié)

以上所述是小編給大家介紹的Java動態(tài)驗證碼單線設(shè)計的兩種方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • javaweb上傳下載實例完整版解析(下)

    javaweb上傳下載實例完整版解析(下)

    這篇文章主要為大家詳細(xì)解析了javaweb上傳下載實例,本文重點在于文件下載功能的實現(xiàn),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • SpringBoot JdbcTemplate批量操作的示例代碼

    SpringBoot JdbcTemplate批量操作的示例代碼

    本篇文章主要介紹了SpringBoot JdbcTemplate批量操作的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • MyBatis-Plus?實體類注解的實現(xiàn)示例

    MyBatis-Plus?實體類注解的實現(xiàn)示例

    MyBatis-Plus作為MyBatis的增強版,提供了一系列實用的注解,如@TableName、@TableId、@TableField等,旨在簡化數(shù)據(jù)庫和Java實體類之間的映射及CRUD操作,通過這些注解,開發(fā)者可以輕松實現(xiàn)表映射、字段映射、邏輯刪除、自動填充和樂觀鎖等功能
    2024-09-09
  • Java中new關(guān)鍵字和newInstance方法的區(qū)別分享

    Java中new關(guān)鍵字和newInstance方法的區(qū)別分享

    在初始化一個類,生成一個實例的時候,newInstance()方法和new關(guān)鍵字除了一個是方法一個是關(guān)鍵字外,最主要的區(qū)別是創(chuàng)建對象的方式不同
    2013-07-07
  • SpringBoot重啟后,第一次請求接口請求慢的問題及解決

    SpringBoot重啟后,第一次請求接口請求慢的問題及解決

    這篇文章主要介紹了SpringBoot重啟后,第一次請求接口請求慢的問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • java.lang.OutOfMemoryError: Metaspace異常解決的方法

    java.lang.OutOfMemoryError: Metaspace異常解決的方法

    這篇文章主要介紹了java.lang.OutOfMemoryError: Metaspace異常解決的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Gradle相對于Maven有哪些優(yōu)點

    Gradle相對于Maven有哪些優(yōu)點

    這篇文章主要介紹了Gradle相對于Maven有哪些優(yōu)點,幫助大家選擇合適的自動構(gòu)建工具,更好的構(gòu)建項目,感興趣的朋友可以了解下
    2020-10-10
  • java 判斷一個數(shù)是否為2的整數(shù)次冪方法

    java 判斷一個數(shù)是否為2的整數(shù)次冪方法

    今天小編就為大家分享一篇java 判斷一個數(shù)是否為2的整數(shù)次冪方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • Springboot如何解決前端請求跨域的問題

    Springboot如何解決前端請求跨域的問題

    這篇文章主要介紹了Springboot如何解決前端請求跨域的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • 詳解springMVC容器加載源碼分析

    詳解springMVC容器加載源碼分析

    這篇文章主要介紹了詳解springMVC容器加載源碼分析,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05

最新評論

和田市| 游戏| 安义县| 江达县| 喀喇沁旗| 同仁县| 应城市| 宽城| 利津县| 玉溪市| 巴林右旗| 宣汉县| 大同县| 徐汇区| 威宁| 南和县| 辽阳市| 铅山县| 沭阳县| 鹰潭市| 北宁市| 防城港市| 宁都县| 普陀区| 桃源县| 克什克腾旗| 阿拉善盟| 东乡族自治县| 贵溪市| 云梦县| 锡林浩特市| 南江县| 雅江县| 田阳县| 营山县| 徐闻县| 聂荣县| 山阳县| 日喀则市| 会理县| 遂昌县|