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

Java動(dòng)態(tài)驗(yàn)證碼單線設(shè)計(jì)的兩種方法

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

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

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

第一種的代碼如下:

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);      
  }
  /**動(dòng)態(tài)生成圖片驗(yàn)證碼
   * @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)建畫(huà)板    
    Graphics g=image.getGraphics();  
     setSquareBackGround(g,width,height,5);
    //確定畫(huà)筆顏色
    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();
     //畫(huà)隨機(jī)干擾框
    setSquareBackGround(g,width,height,3); 
    //畫(huà)干擾點(diǎn)
    CreateRandomPoint(width, height,100,g,100);    
    //隨機(jī)畫(huà)幾條線
    CreateRandomLine(width, height,8,g,100);  
    //隨機(jī)獲取4個(gè)字符
    Random random=new Random();
    for (int i = 0; i < 4; i++) {
      //62個(gè)填充字符里面隨機(jī)的隨機(jī)的收取字符
      int index=random.nextInt(62);
      //截取一個(gè)字符
      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個(gè)字符在一起
      sb.append(st);
    }
    //把StringBuffer中的驗(yàn)證碼放到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)
  { // 隨機(jī)產(chǎn)生干擾點(diǎ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)); 
    } 
  }
/**
 * 隨機(jī)產(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)
  { // 隨機(jī)產(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);
    } 
  }
  /**
   * 由隨機(jī)產(chǎn)生的方塊來(lái)作為干擾背景
   */
  private void setSquareBackGround(Graphics g,int width,int height,int count){
    // 隨機(jī)產(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;
  }

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

下面介紹第二種:

這種呢是我們開(kāi)發(fā)中是可以用得到的,使用在的是網(wǎng)頁(yè)端的交互,我們?cè)诘卿浘W(wǎng)站的時(shí)候有很多的驗(yàn)證碼就可以用這個(gè)來(lái)寫(xiě)了

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);      
  }
  /**動(dòng)態(tài)生成圖片驗(yàn)證碼
   * @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)建畫(huà)板    
    Graphics g=image.getGraphics();  
     setSquareBackGround(g,width,height,5);
    //確定畫(huà)筆顏色
    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();
//隨機(jī)獲取4個(gè)字符
    Random random=new Random();
    for (int i = 0; i < 4; i++) {
      //62個(gè)填充字符里面隨機(jī)的隨機(jī)的收取字符
      int index=random.nextInt(62);
      //截取一個(gè)字符
      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個(gè)字符在一起
      sb.append(st);
    }
//把StringBuffer中的驗(yàn)證碼放到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());
  }

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

總結(jié)

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

相關(guān)文章

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

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

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

    SpringBoot JdbcTemplate批量操作的示例代碼

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

    MyBatis-Plus?實(shí)體類(lèi)注解的實(shí)現(xiàn)示例

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

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

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

    SpringBoot重啟后,第一次請(qǐng)求接口請(qǐng)求慢的問(wèn)題及解決

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

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

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

    Gradle相對(duì)于Maven有哪些優(yōu)點(diǎn)

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

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

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

    Springboot如何解決前端請(qǐng)求跨域的問(wèn)題

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

    詳解springMVC容器加載源碼分析

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

最新評(píng)論

云阳县| 尖扎县| 偏关县| 广南县| 廊坊市| 弥渡县| 确山县| 民勤县| 横山县| 泰顺县| 宜良县| 青阳县| 乌兰察布市| 南溪县| 永康市| 寿宁县| 西和县| 惠水县| 富锦市| 嘉峪关市| 始兴县| 施甸县| 正定县| 新蔡县| 墨脱县| 武川县| 邵武市| 天镇县| 蛟河市| 乐清市| 永登县| 南丰县| 都江堰市| 镶黄旗| 水富县| 桐梓县| 陇川县| 岳池县| 息烽县| 鹿邑县| 寿光市|