国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > Java > 正文

Java動態驗證碼單線設計的兩種方法

2024-07-14 08:41:45
字體:
來源:轉載
供稿:網友

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

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

第一種的代碼如下:

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);        }  /**動態生成圖片驗證碼   * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)   */  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {    // TODO Auto-generated method stub    //創建圖像    int width=100;    int height=40;    //圖片的大小設置    BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);    //創建畫板        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);      //設置字體      g.setFont(new Font("宋體",Font.BOLD,30));      g.drawString(st, 20*i, 30);//防止4個字符在一起      sb.append(st);    }    //把StringBuffer中的驗證碼放到session里面,目的是讓Login調用    HttpSession se=request.getSession();    se.setAttribute("number", sb.toString());    //發送圖片到瀏覽器 指定發送的圖片 和格式    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)  { // 隨機產生干擾點    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));     }   }/** * 隨機產生干擾線條 * @param width * @param height * @param minMany 最少產生的數量 * @param g * @param alpha 透明度0~255 0表示全透 */  private void CreateRandomLine(int width,int height,int minMany,Graphics g,int alpha)  { // 隨機產生干擾線條    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);    }   }  /**   * 由隨機產生的方塊來作為干擾背景   */  private void setSquareBackGround(Graphics g,int width,int height,int count){    // 隨機產生干擾線條    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;  }

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

下面介紹第二種:

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

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);        }  /**動態生成圖片驗證碼   * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)   */  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {    // TODO Auto-generated method stub    //創建圖像    int width=100;    int height=40;    //圖片的大小設置    BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);    //創建畫板        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);      //設置字體      g.setFont(new Font("宋體",Font.BOLD,30));      g.drawString(st, 20*i, 30);//防止4個字符在一起      sb.append(st);    }//把StringBuffer中的驗證碼放到session里面,目的是讓Login調用    HttpSession se=request.getSession();    se.setAttribute("number", sb.toString());    //發送圖片到瀏覽器 指定發送的圖片 和格式    response.setContentType("image/jpeg");    //圖片,圖片的格式,輸出的方式    ImageIO.write(image, "jpg", response.getOutputStream());  }

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

總結

以上所述是小編給大家介紹的Java動態驗證碼單線設計的兩種方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 郸城县| 罗甸县| 略阳县| 文昌市| 宣恩县| 襄城县| 平顶山市| 海南省| 瑞金市| 盐山县| 连云港市| 玉树县| 绥阳县| 孟州市| 历史| 长乐市| 邵东县| 广元市| 周宁县| 乌拉特后旗| 会东县| 东明县| 稷山县| 龙陵县| 江门市| 建德市| 大埔县| 紫云| 诸暨市| 安塞县| 湘乡市| 平遥县| 图片| 桂东县| 长汀县| 麻栗坡县| 中西区| 西盟| 中超| 辽宁省| 黎城县|