package?util;
成都創(chuàng)新互聯(lián)公司致力于互聯(lián)網(wǎng)網(wǎng)站建設與網(wǎng)站營銷,提供網(wǎng)站設計、成都網(wǎng)站設計、網(wǎng)站開發(fā)、seo優(yōu)化、網(wǎng)站排名、互聯(lián)網(wǎng)營銷、微信小程序定制開發(fā)、公眾號商城、等建站開發(fā),成都創(chuàng)新互聯(lián)公司網(wǎng)站建設策劃專家,為不同類型的客戶提供良好的互聯(lián)網(wǎng)應用定制解決方案,幫助客戶在新的全球化互聯(lián)網(wǎng)環(huán)境中保持優(yōu)勢。
import?java.awt.Color;
import?java.awt.Font;
import?java.awt.Graphics;
import?java.awt.image.BufferedImage;
import?java.io.FileOutputStream;
import?java.io.IOException;
import?java.io.OutputStream;
import?java.util.Random;
import?javax.imageio.ImageIO;
public?final?class?ImageUtil?{
//?驗證碼字符集
private?static?final?char[]?chars?=?{?
'0',?'1',?'2',?'3',?'4',?'5',?'6',?'7',?'8',?'9',?
'A',?'B',?'C',?'D',?'E',?'F',?'G',?'H',?'I',?'J',?'K',?'L',?'M',?'N',?
'O',?'P',?'Q',?'R',?'S',?'T',?'U',?'V',?'W',?'X',?'Y',?'Z',?
'a',?'b',?'c',?'d',?'e',?'f',?'g',?'h',?'i',?'j',?'k',?'l',?'m',?'n',?
'o',?'p',?'q',?'r',?'s',?'t',?'u',?'v',?'w',?'x',?'y',?'z'};
//?字符數(shù)量
private?static?final?int?SIZE?=?4;
//?干擾線數(shù)量
private?static?final?int?LINES?=?5;
//?寬度
private?static?final?int?WIDTH?=?80;
//?高度
private?static?final?int?HEIGHT?=?40;
//?字體大小
private?static?final?int?FONT_SIZE?=?30;
/**
*?生成隨機驗證碼及圖片
*?返回的數(shù)組中,第1個值是驗證碼,第2個值是圖片
*/
public?static?Object[]?createImage()?{
StringBuffer?sb?=?new?StringBuffer();
//?1.創(chuàng)建空白圖片
BufferedImage?image?=?new?BufferedImage(
WIDTH,?HEIGHT,?BufferedImage.TYPE_INT_RGB);
//?2.獲取圖片畫筆
Graphics?graphic?=?image.getGraphics();
//?3.設置畫筆顏色
graphic.setColor(Color.LIGHT_GRAY);
//?4.繪制矩形背景
graphic.fillRect(0,?0,?WIDTH,?HEIGHT);
//?5.畫隨機字符
Random?ran?=?new?Random();
for?(int?i?=?0;?i?SIZE;?i++)?{
//?取隨機字符索引
int?n?=?ran.nextInt(chars.length);
//?設置隨機顏色
graphic.setColor(getRandomColor());
//?設置字體大小
graphic.setFont(new?Font(
null,?Font.BOLD?+?Font.ITALIC,?FONT_SIZE));
//?畫字符
graphic.drawString(
chars[n]?+?"",?i?*?WIDTH?/?SIZE,?HEIGHT?/?2);
//?記錄字符
sb.append(chars[n]);
}
//?6.畫干擾線
for?(int?i?=?0;?i??LINES;?i++)?{
//?設置隨機顏色
graphic.setColor(getRandomColor());
//?隨機畫線
graphic.drawLine(ran.nextInt(WIDTH),?ran.nextInt(HEIGHT),
ran.nextInt(WIDTH),?ran.nextInt(HEIGHT));
}
//?7.返回驗證碼和圖片
return?new?Object[]{sb.toString(),?image};
}
/**
*?隨機取色
*/
public?static?Color?getRandomColor()?{
Random?ran?=?new?Random();
Color?color?=?new?Color(ran.nextInt(256),?
ran.nextInt(256),?ran.nextInt(256));
return?color;
}
public?static?void?main(String[]?args)?throws?IOException?{
Object[]?objs?=?createImage();
BufferedImage?image?=?(BufferedImage)?objs[1];
OutputStream?os?=?new?FileOutputStream("d:/1.png");
ImageIO.write(image,?"jpeg",?os);
os.close();
}
}
package com.he;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import java.awt.*;
import java.awt.image.*;
import javax.imageio.*;
public class CodeFact
extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
//設置頁面不緩存
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
// 在內存中創(chuàng)建圖象
int width = 60, height = 20;
BufferedImage image = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
// 獲取圖形上下文
Graphics g = image.getGraphics();
//生成隨機類
Random random = new Random();
// 設定背景色
g.setColor(getRandColor(200, 250));
g.fillRect(0, 0, width, height);
//設定字體
g.setFont(new Font("Times New Roman", Font.PLAIN, 18));
//畫邊框
g.setColor(new Color(33,66,99));
g.drawRect(0,0,width-1,height-1);
// 隨機產(chǎn)生155條干擾線,使圖象中的認證碼不易被其它程序探測到
g.setColor(getRandColor(160, 200));
for (int i = 0; i 155; i++) {
int x = random.nextInt(width);
int y = random.nextInt(height);
int xl = random.nextInt(12);
int yl = random.nextInt(12);
g.drawLine(x, y, x + xl, y + yl);
}
// 取隨機產(chǎn)生的認證碼(4位數(shù)字)
String sRand = "";
for (int i = 0; i 4; i++) {
String rand = String.valueOf(random.nextInt(10));
sRand += rand;
// 將認證碼顯示到圖象中
g.setColor(new Color(20 + random.nextInt(110), 20 + random.nextInt(110),
20 + random.nextInt(110))); //調用函數(shù)出來的顏色相同,可能是因為種子太接近,所以只能直接生成
g.drawString(rand, 13 * i + 6, 16);
}
// 將認證碼存入SESSION
HttpSession session = request.getSession();
session.setAttribute("rand", sRand);
// 圖象生效
g.dispose();
// 輸出圖象到頁面
ImageIO.write(image, "JPEG", response.getOutputStream());
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
doGet(request, response);
}
//給定范圍獲得隨機顏色
private Color getRandColor(int fc, int bc) {
Random random = new Random();
if (fc 255) {
fc = 255;
}
if (bc 255) {
bc = 255;
}
int r = fc + random.nextInt(bc - fc);
int g = fc + random.nextInt(bc - fc);
int b = fc + random.nextInt(bc - fc);
return new Color(r, g, b);
}
}
你試試??!
不知道你問的是不是生成這種圖片驗證碼?如果只要一個隨機四位數(shù) 那這行代碼就夠了(new Random().nextInt(9000) + 1000;),如果是生成頁面圖片驗證碼就是下面的了: //設定 響應模式 resp.setContentType("image/jpeg"); // 生成令牌環(huán)數(shù)據(jù); Integer token = new Random().nextInt(9000) + 1000; // 保存令牌環(huán)數(shù)據(jù)到session中 req.getSession().setAttribute(IMAGE_TOKEN_NAME, token); // 生成令牌環(huán)圖片 ServletOutputStream out = resp.getOutputStream(); BufferedImage img = new BufferedImage(60, 20, BufferedImage.TYPE_INT_RGB); Graphics g = img.getGraphics(); g.setColor(Color.YELLOW); g.fillRect(0, 0, img.getWidth(), img.getHeight()); g.setColor(Color.BLUE); g.setFont(new Font("", Font.BOLD, 18)); g.drawString(String.valueOf(token), 10, 16); ImageIO.write(img, "jpg", out); out.close();
下面簡單的介紹他們的功能和用途,執(zhí)行效率等。每個都有各自的優(yōu)缺點看你是做甚什么方面的研究開發(fā)用。.net,是網(wǎng)站編程,現(xiàn)在很多都用這個,但是這個語言編程都有統(tǒng)一思路,很好掌握。窒息那個效率不是很高;php 支持跨平臺,很容易學會,執(zhí)行的效率很高;asp是ASP.net的前身,它比較穩(wěn)定,比.net要弱一點。但是比.net好學。jsp 是網(wǎng)頁編程,這個學習大約一周就能搞定,不過這個得多實踐,不然的話,時間長了,就容易忘記。
我自己做的系統(tǒng)里面用作驗證碼的JSP的%@page contentType="image/jpeg;charset=utf-8"%%@page import="java.util.*,java.awt.*,java.awt.image.*,javax.imageio.*" %%@ page import="java.io.OutputStream" %html body %! Color getRandColor(int fc,int bc) { Random rd=new Random(); if(fc255) fc=255; if(bc255) bc=255; int red=fc+rd.nextInt(bc-fc); int green=fc+rd.nextInt(bc-fc); int blue=fc+rd.nextInt(bc-fc); return new Color(red,green,blue); } % % Random r=new Random(); response.addHeader("Pragma","No-cache"); response.addHeader("Cache-Control","no-cache"); response.addDateHeader("expires",0); int width=90; int height=23; BufferedImage pic=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB); Graphics gc=pic.getGraphics(); gc.setColor(getRandColor(200,250)); gc.fillRect(0,0,width,height); String[] rNum ={"0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f", "g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w", "x","y","z","A","B","C","D","E","F","G","H","I","J","K","L","M","N", "O","P","Q","R","S","T","U","V","W","X","Y","Z"}; int[] style = {Font.PLAIN,Font.BOLD,Font.ITALIC,Font.PLAIN+Font.BOLD, Font.BOLD+Font.ITALIC,Font.PLAIN+Font.ITALIC,Font.PLAIN+Font.BOLD+Font.ITALIC}; gc.setColor(Color.WHITE); gc.drawLine(0,30,90,10); gc.setColor(getRandColor(160,200)); for (int i=0;i50;i++) { int x = r.nextInt(width); int y = r.nextInt(height); int xl = r.nextInt(10); int yl = r.nextInt(10); gc.drawLine(x,y,x+xl,y+yl); } gc.setColor(getRandColor(60,150)); String rt = ""; for(int i=0;i4;i++){ String temp = rNum[r.nextInt(62)]; rt = rt+temp; gc.setFont(new Font("Times New Roman",style[r.nextInt(7)],15)); gc.drawString(temp,5+i*15+r.nextInt(10),10+r.nextInt(10)); } gc.dispose(); session.setAttribute("randNum",rt); OutputStream os=response.getOutputStream(); ImageIO.write(pic,"JPEG",os); System.out.println("當前驗證碼為:"+session.getAttribute("randNum")); os.flush(); os.close(); os=null; response.flushBuffer(); out.clear(); out = pageContext.pushBody(); % /body/html
樓上正解
/**
*?圖片驗證碼
*?
*?@author?HuangYong
*?
*/
public?class?CheckCode?extends?HttpServlet?{
private?static?final?long?serialVersionUID?=?1532787236715859525L;
/**
?*?驗證圖片寬
?*/
private?static?final?int?WIDTH?=?80;
/**
?*?驗證圖片高度
?*/
private?static?final?int?HEIGHT?=?20;
public?void?doGet(HttpServletRequest?request,?HttpServletResponse?response)
throws?ServletException,?IOException?{
//?獲得圖片
BufferedImage?image?=?new?BufferedImage(WIDTH,?HEIGHT,
BufferedImage.TYPE_INT_RGB);
//?獲取畫筆
Graphics?g?=?image.getGraphics();
//?設置邊框
setBounds(g);
//?//?設置背景
//?setBackGround(g);
//?干擾線
drawRandomLine(g);
//?驗證碼
drawRandomString((Graphics2D)?g,?request);
//?發(fā)送給頁面
response.setContentType("image/jpeg");
response.setDateHeader("expries",?-1);
response.setHeader("cache-control",?"no-cache");
response.setHeader("progma",?"no-cache");
ImageIO.write(image,?"jpg",?response.getOutputStream());
}
/**
?*?邊框
?*?
?*?@param?g
?*/
private?void?setBounds(Graphics?g)?{
g.setColor(Color.BLUE);
g.fillRect(0,?0,?WIDTH,?HEIGHT);
g.setColor(Color.WHITE);
g.fillRect(1,?1,?WIDTH?-?2,?HEIGHT?-?2);
}
/**
?*?背景
?*?
?*?@param?g
?*/
//?private?void?setBackGround(Graphics?g)?{
//
//?g.setColor(Color.WHITE);
//?g.drawRect(1,?1,?WIDTH-2,?HEIGHT-2);
//
//?}
/**
?*?干擾線
?*?
?*?@param?g
?*/
private?void?drawRandomLine(Graphics?g)?{
g.setColor(Color.GREEN);
int?x1,?y1;
int?x2,?y2;
Random?r?=?new?Random();
for?(int?i?=?0;?i??5;?i++)?{
//?起始xy
x1?=?r.nextInt(WIDTH);
y1?=?r.nextInt(HEIGHT);
//?結束xy
x2?=?r.nextInt(WIDTH);
y2?=?r.nextInt(HEIGHT);
g.drawLine(x1,?y1,?x2,?y2);
}
}
/**
?*?驗證碼
?*?
?*?@param?g
?*/
private?void?drawRandomString(Graphics2D?g,?HttpServletRequest?request)?{
g.setColor(Color.RED);
g.setFont(new?Font("宋體",?Font.BOLD,?20));
String?base?=?"qwertyupasdfghjkzxcvbnm23456789QWERTYUIOPASDFGHJKLZXCVBNM";
StringBuilder?sb?=?new?StringBuilder();
char?ch?=?'\u0000';
int?degree?=?0;
Random?r?=?new?Random();
int?startX?=?8;
for?(int?i?=?0;?i??4;?i++)?{
ch?=?base.charAt(r.nextInt(base.length()));
//?設置旋轉,?±20°
degree?=?r.nextInt()?%?20;
g.rotate(degree?*?Math.PI?/?180,?startX,?14);
g.drawString(ch?+?"",?startX,?16);
//?取消旋轉
g.rotate(-degree?*?Math.PI?/?180,?startX,?14);
startX?+=?18;
sb.append(ch);
}
request.getSession().setAttribute("checkCode",?sb.toString().toLowerCase());
}
public?void?doPost(HttpServletRequest?request,?HttpServletResponse?response)
throws?ServletException,?IOException?{
doGet(request,?response);
}
希望能幫助你
Java如何實現(xiàn)驗證碼驗證功能呢?日常生活中,驗證碼隨處可見,他可以在一定程度上保護賬號安全,那么他是怎么實現(xiàn)的呢?
Java實現(xiàn)驗證碼驗證功能其實非常簡單:用到了一個Graphics類在畫板上繪制字母,隨機選取一定數(shù)量的字母隨機生成,然后在畫板上隨機生成幾條干擾線。
首先,寫一個驗證碼生成幫助類,用來繪制隨機字母:
import?java.awt.Color;
import?java.awt.Font;
import?java.awt.Graphics;
import?java.awt.image.BufferedImage;
import?java.io.IOException;
import?java.io.OutputStream;
import?java.util.Random;
import?javax.imageio.ImageIO;
public?final?class?GraphicHelper?{
/**
*?以字符串形式返回生成的驗證碼,同時輸出一個圖片
*
*?@param?width
*????????????圖片的寬度
*?@param?height
*????????????圖片的高度
*?@param?imgType
*????????????圖片的類型
*?@param?output
*????????????圖片的輸出流(圖片將輸出到這個流中)
*?@return?返回所生成的驗證碼(字符串)
*/
public?static?String?create(final?int?width,?final?int?height,?final?String?imgType,?OutputStream?output)?{
StringBuffer?sb?=?new?StringBuffer();
Random?random?=?new?Random();
BufferedImage?image?=?new?BufferedImage(width,?height,?BufferedImage.TYPE_INT_RGB);
Graphics?graphic?=?image.getGraphics();
graphic.setColor(Color.getColor("F8F8F8"));
graphic.fillRect(0,?0,?width,?height);
Color[]?colors?=?new?Color[]?{?Color.BLUE,?Color.GRAY,?Color.GREEN,?Color.RED,?Color.BLACK,?Color.ORANGE,
Color.CYAN?};
//?在?"畫板"上生成干擾線條?(?50?是線條個數(shù))
for?(int?i?=?0;?i??50;?i++)?{
graphic.setColor(colors[random.nextInt(colors.length)]);
final?int?x?=?random.nextInt(width);
final?int?y?=?random.nextInt(height);
final?int?w?=?random.nextInt(20);
final?int?h?=?random.nextInt(20);
final?int?signA?=?random.nextBoolean()???1?:?-1;
final?int?signB?=?random.nextBoolean()???1?:?-1;
graphic.drawLine(x,?y,?x?+?w?*?signA,?y?+?h?*?signB);
}
//?在?"畫板"上繪制字母
graphic.setFont(new?Font("Comic?Sans?MS",?Font.BOLD,?30));
for?(int?i?=?0;?i??6;?i++)?{
final?int?temp?=?random.nextInt(26)?+?97;
String?s?=?String.valueOf((char)?temp);
sb.append(s);
graphic.setColor(colors[random.nextInt(colors.length)]);
graphic.drawString(s,?i?*?(width?/?6),?height?-?(height?/?3));
}
graphic.dispose();
try?{
ImageIO.write(image,?imgType,?output);
}?catch?(IOException?e)?{
e.printStackTrace();
}
return?sb.toString();
}
}?
接著,創(chuàng)建一個servlet,用來固定圖片大小,以及處理驗證碼的使用場景,以及捕獲頁面生成的驗證碼(捕獲到的二維碼與用戶輸入的驗證碼一致才能通過)。
import?java.io.OutputStream;
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;
@WebServlet(urlPatterns?=?"/verify/regist.do"?)
public?class?VerifyCodeServlet?extends?HttpServlet?{
private?static?final?long?serialVersionUID?=?3398560501558431737L;
@Override
protected?void?service(HttpServletRequest?request,?HttpServletResponse?response)
throws?ServletException,?IOException?{
//?獲得?當前請求?對應的?會話對象
HttpSession?session?=?request.getSession();
//?從請求中獲得?URI?(?統(tǒng)一資源標識符?)
String?uri?=?request.getRequestURI();
System.out.println("hello?:?"?+?uri);
final?int?width?=?180;?//?圖片寬度
final?int?height?=?40;?//?圖片高度
final?String?imgType?=?"jpeg";?//?指定圖片格式?(不是指MIME類型)
final?OutputStream?output?=?response.getOutputStream();?//?獲得可以向客戶端返回圖片的輸出流
//?(字節(jié)流)
//?創(chuàng)建驗證碼圖片并返回圖片上的字符串
String?code?=?GraphicHelper.create(width,?height,?imgType,?output);
System.out.println("驗證碼內容:?"?+?code);
//?建立?uri?和?相應的?驗證碼?的關聯(lián)?(?存儲到當前會話對象的屬性中?)
session.setAttribute(uri,?code);
System.out.println(session.getAttribute(uri));
}
}?
接著寫一個HTML注冊頁面用來檢驗一下:
html
head
meta?charset="UTF-8"
title注冊/title
link?rel="stylesheet"?href="styles/general.css"
link?rel="stylesheet"?href="styles/cell.css"
link?rel="stylesheet"?href="styles/form.css"
script?type="text/javascript"?src="js/ref.js"/script
style?type="text/css"?
.logo-container?{
margin-top:?50px?;
}
.logo-container?img?{
width:?100px?;
}
.message-container?{
height:?80px?;
}
.link-container?{
height:?40px?;
line-height:?40px?;
}
.link-container?a?{
text-decoration:?none?;
}
/style
/head
body
div?class="container?form-container"
form?action="/wendao/regist.do"?method="post"
div?class="form"?!--?注冊表單開始?--
div?class="form-row"
span?class="cell-1"
i?class="fa?fa-user"/i
/span
span?class="cell-11"?style="text-align:?left;"
input?type="text"?name="username"?placeholder="請輸入用戶名"
/span
/div
div?class="form-row"
span?class="cell-1"
i?class="fa?fa-key"/i
/span
span?class="cell-11"?style="text-align:?left;"
input?type="password"?name="password"?placeholder="請輸入密碼"
/span
/div
div?class="form-row"
span?class="cell-1"
i?class="fa?fa-keyboard-o"/i
/span
span?class="cell-11"?style="text-align:?left;"
input?type="password"?name="confirm"?placeholder="請確認密碼"
/span
/div
div?class="form-row"
span?class="cell-7"
input?type="text"?name="verifyCode"?placeholder="請輸入驗證碼"
/span
span?class="cell-5"?style="text-align:?center;"
img?src="/demo/verify/regist.do"?onclick="myRefersh(this)"
/span
/div
div?class="form-row"?style="border:?none;"
span?class="cell-6"?style="text-align:?left"
input?type="reset"?value="重置"
/span
span?class="cell-6"??style="text-align:right;"
input?type="submit"?value="注冊"
/span
/div
/div?!--?注冊表單結束?--
/form
/div
/body
/html
效果如下圖:
在控制臺接收到的圖片中驗證碼的變化如下:
當點擊刷新頁面的時候,驗證碼也會隨著變化,但我們看不清驗證碼時,只要點擊驗證碼就會刷新,這樣局部的刷新可以用JavaScript來實現(xiàn)。
在img
src="/demo/verify/regist.do"中,添加一個問號和一串后綴數(shù)字,當刷新時讓后綴數(shù)字不斷改變,那么形成的驗證碼也會不斷變化,我們可以采用的一種辦法是后綴數(shù)字用date代替,date獲取本機時間,時間是隨時變的,這樣就保證了刷新驗證碼可以隨時變化。
代碼如下:
function?myRefersh(?e?)?{
const?source?=?e.src?;?//?獲得原來的?src?中的內容
//console.log(?"source?:?"?+?source??)?;
var?index?=?source.indexOf(?"?"?)?;??//?從?source?中尋找???第一次出現(xiàn)的位置?(如果不存在則返回?-1?)
//console.log(?"index?:?"?+?index??)?;
if(?index??-1?)?{?//?如果找到了????就進入內部
var?s?=?source.substring(?0?,?index?)?;?//?從?source?中截取?index?之前的內容?(?index?以及?index?之后的內容都被舍棄?)
//console.log(?"s?:?"?+?s??)?;
var?date?=?new?Date();?//?創(chuàng)建一個?Date?對象的?一個?實例
var?time?=?date.getTime()?;?//?從?新創(chuàng)建的?Date?對象的實例中獲得該時間對應毫秒值
e.src?=?s?+?"?time="?+?time?;?//?將?加了?尾巴?的?地址?重新放入到?src?上
//console.log(?e.src?)?;
}?else?{
var?date?=?new?Date();
e.src?=?source?+?"?time="?+?date.getTime();
}
}
如回答不詳細可追問
后臺寫一個生成圖片隨機的代碼,生成圖片給前臺。切換圖片的時候,使用ajax獲取圖片數(shù)據(jù)就行。
附上生成圖片的代碼
public class ValidateCode {
private int width=180;
private int height=60;
private int codeCount = 4;
private int x = 0;
private int codeY;
private String Code;
private BufferedImage buffImg;
static char[] codeSequence = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
'X', 'Y', 'Z','a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
'x', 'y', 'z', 'o', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
private int fontHeight;
public ValidateCode() {
x = width / (codeCount + 2);
fontHeight = height - 2;
codeY = height - 4;
CreateCode();
}
public void CreateCode(){
// 定義圖像buffer
BufferedImage buffImg = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);
Graphics2D g = buffImg.createGraphics();
// 創(chuàng)建一個隨機數(shù)生成器類
Random random = new Random();
// 將圖像填充為白色
g.setColor(Color.WHITE);
g.fillRect(0, 0, width, height);
// 創(chuàng)建字體,字體的大小應該根據(jù)圖片的高度來定。
Font font = new Font("Fixedsys", Font.PLAIN, fontHeight);
// 設置字體。
g.setFont(font);
// 畫邊框。
g.setColor(Color.BLACK);
g.drawRect(0, 0, width - 1, height - 1);
// randomCode用于保存隨機產(chǎn)生的驗證碼,以便用戶登錄后進行驗證。
StringBuffer randomCode = new StringBuffer();
int red = 0, green = 0, blue = 0;
// 隨機產(chǎn)生codeCount數(shù)字的驗證碼。
for (int i = 0; i codeCount; i++) {
// 得到隨機產(chǎn)生的驗證碼數(shù)字。
String strRand = String.valueOf(codeSequence[random.nextInt(62)]);
// 產(chǎn)生隨機的顏色分量來構造顏色值,這樣輸出的每位數(shù)字的顏色值都將不同。
red = random.nextInt(255);
green = random.nextInt(255);
blue = random.nextInt(255);
// 用隨機產(chǎn)生的顏色將驗證碼繪制到圖像中。
g.setColor(new Color(red, green, blue));
g.drawString(strRand, (i ) * x+20, codeY);
// 將產(chǎn)生的四個隨機數(shù)組合在一起。
randomCode.append(strRand);
}
this.Code=randomCode.toString().toUpperCase();
this.buffImg=buffImg;
}
public String getCode() {
return Code;
}
public void setCode(String code) {
Code = code;
}
public BufferedImage getBuffImg() {
return buffImg;
}
public void setBuffImg(BufferedImage buffImg) {
this.buffImg = buffImg;
}
}