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动态验证码单线设计的两种方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: word自带公式编辑_怎样在word20
- 下一篇: java 怎么向串口发送指令_idea