麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發(fā) > Java > 正文

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

2024-07-14 08:41:45
字體:
供稿:網(wǎng)友

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ù)大家的。在此也非常感謝大家對VeVb武林網(wǎng)網(wǎng)站的支持!


注:相關(guān)教程知識閱讀請移步到JAVA教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 国产69精品久久久久9999不卡免费 | 7777欧美 | 羞羞视频免费观看入口 | 欧美日韩手机在线观看 | av在线1 | 国产伊人色 | 久久亚洲精品11p | 国产三级在线观看a | 97超级碰碰人国产在线观看 | 久久网日本 | 91精品国产乱码久久久久久久久 | 亚洲热线99精品视频 | 成人国产精品久久 | 久久久久9999 | 久久精品成人免费国产片桃视频 | 日本一级黄色大片 | 特一级毛片 | 在线无码| 久久久久99999 | 成人18在线 | 一区二区三区欧美在线观看 | 成人不卡在线观看 | 亚洲va在线 | 国产午夜网| 色欲香天天天综合网站 | 91九色免费视频 | 国产乱子视频 | 久久人添人人爽人人爽人人片av | 国产精品美女久久久久久网站 | 欧美大荫蒂xxx | 日本高清电影在线播放 | 国产精品一区二区三区在线播放 | 91精品国产乱码久久桃 | 三人弄娇妻高潮3p视频 | 免费国产一区 | 国产99久久久久久免费看农村 | 性欧美在线视频 | 91 免费看片 | 狠狠干视频网站 | 欧美一级特黄aaaaaaa什 | 成人一区二区在线观看视频 |