日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java校验码的设计_Java动态验证码单线设计的两种方法

發布時間:2025/3/20 java 66 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java校验码的设计_Java动态验证码单线设计的两种方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

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

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

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

{

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動態驗證碼單線設計的兩種方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!

總結

以上是生活随笔為你收集整理的java校验码的设计_Java动态验证码单线设计的两种方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。