導航:首頁 > 編程語言 > 生成驗證碼的java代碼

生成驗證碼的java代碼

發布時間:2025-08-08 22:51:01

Ⅰ 用java生成6位驗證碼,由大小寫數字組成,不能重復字元

生成隨機可以用Random類,不能重復可以考慮放在HashSet中,因為HashSet的值是不能重復的,看代碼如下:

{
publicstaticvoidmain(String[]args){

Set<String>store=getletterandnum(6);

printSet(store);

}

publicstaticSet<String>getletterandnum(intlength){

Set<String>set=newHashSet<String>();

for(inti=0;i<length;i++){

Stringvalue=getrandom();

set.add(value);
}

if(set.size()<length){//如果沒有生成6位

Stringvalue=getrandom();//繼續調用生成隨機數的方法

set.add(value);

}

returnset;
}

privatestaticStringgetrandom(){//生成隨機字母和數字方法

Stringvalue="";

Randomrandom=newRandom();

intgen=random.nextInt(2);//0、1、2

Stringcharornum=gen%2==0?"char":"num";

if("char".equals(charornum)){

inttemp=random.nextInt(2)%2==0?65:97;

intascii=random.nextInt(26);

value+=(char)(ascii+temp);

}elseif("num".equalsIgnoreCase(charornum)){

value+=String.valueOf(random.nextInt(10));
}
returnvalue;
}

publicstaticvoidprintSet(Setset){//列印set的方法

Iteratoriterator=set.iterator();
while(iterator.hasNext()){
Stringele=(String)iterator.next();
System.out.print(ele+"");

}

}

Ⅱ 用java怎麼製作驗證碼

原理:

1.隨機生成4個數字 用到了Random類
2.對這4個數字設置字體格式 用 setFont方法
3.改變字體顏色用setColor 然後隨機生成顏色

代碼如下
package s1;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.jms.Session;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class GetImage extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

this.doPost(request, response);
}

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 發送圖片不能夠添加這2行代碼
// response.setContentType("text/html;charset=UTF-8");
// request.setCharacterEncoding("UTF-8");

int width=100;
int height=50;
//獲得一張圖片
BufferedImage image=new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

Graphics g=image.getGraphics();
g.setColor(Color.WHITE);
g.fillRect(1, 1, width-2, height-2);
g.setFont(new Font("宋體",Font.BOLD,30));
Random random=new Random();

/虛枯兄/ 填充的字元串
String str="";

//緩存生成的驗證碼敗橘
StringBuffer stringbuffer=new StringBuffer();

//隨機生成驗證碼的顏差襲色和字元
for(int i=0;i<4;i++)
{ //設置隨機顏色
g.setColor(new Color(random.nextInt(256), random.nextInt(256), random.nextInt(256)));

int index=random.nextInt(62);//這里的62就是從填充字元段中隨意選取一個位置
String str1=str.substring(index,index+1);
g.drawString(str1, 20*i, 30);//x,y數值設置太小會顯示不出來
stringbuffer.append(str1);
}

//將生成的驗證碼存到伺服器
request.getSession().setAttribute("checkcode", stringbuffer.toString());//key和value

//將圖片發送給瀏覽器
ImageIO.write(image, "jpg", response.getOutputStream());

}

}

用戶登錄界面代碼
package s1;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class Login extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

}

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

response.setContentType("text/html;charset=UTF-8");// 設置伺服器發送給瀏覽器的編碼方式
request.setCharacterEncoding("UTF-8"); // 客戶端向伺服器提交的數據的解碼方式
// 獲得用戶提交的數據
String checkcode = request.getParameter("checkcode");
System.out.println(checkcode);

// 判斷輸入的驗證碼是不是符合
HttpSession session = request.getSession();// session是存放數據的地方
String str = (String) session.getAttribute("checkcode");

if (str != null) {
if (checkcode.compareToIgnoreCase(str) == 0) // 驗證碼忽略大小寫
response.getWriter().println("驗證碼輸入正確");

else
response.getWriter().println("驗證碼輸入錯誤");
}

else response.getWriter().println("驗證碼失效");

// 使用完的驗證碼信息要刪除,返回原頁面再輸一次,驗證碼就失效了
session.removeAttribute("checkcode");

}

}

Ⅲ 用java隨機生成四位驗證碼,只求編程代碼

我自己做的系磨廳統裡面用作驗證碼的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(fc>255) fc=255;
if(bc>255) 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;i<昌虧50;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;i<4;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>

Ⅳ 怎樣用java實現驗證碼

現在許多系統的注冊 登錄或者發布信息模塊都添加的隨機驗證碼功能 就是為了避免自動注冊程序或者自動發布程序的使用

驗證碼實際上就是隨機選擇一些字元以圖片的形式展現在頁面上 如果進行提交操作的同時需要將圖片上的字元同時提交 如果提交的字元與伺服器session保存的不同 則認為提交基數信息無效 為了避免自動程序分析解析圖片 通常會在圖片上隨機生成一些干擾線或者將字元進行扭曲 增加自動識別驗證碼的難度

在這里 我們使用java實現驗證碼

<%@ page contentType= image/jpeg import= java awt * java awt image * java util * javax imageio * %>

<%!

Color getRandColor(int fc int bc){//給定范圍獲得隨機顏色

Random random = new Random();

if(fc> ) fc= ;

租鋒做if(bc> ) bc= ;

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);

}

%>

<%

//設置頁面不緩存

response setHeader( Pragma No cache );

弊衡response setHeader( Cache Control no cache );

response setDateHeader( Expires );

// 在內存中創建圖象

int width= height= ;

BufferedImage image = new BufferedImage(width height BufferedImage TYPE_INT_RGB);

// 獲取圖形上下文

Graphics g = image getGraphics();

//生成隨機類

Random random = new Random();

// 設定背景色

g setColor(getRandColor( ));

g fillRect( width height);

//設定字體

g setFont(new Font( Times New Roman Font PLAIN ));

// 隨機產生 條干擾線 使圖象中的認證碼不易被其它程序探測到

g setColor(getRandColor( ));

for (int i= ;i< ;i++)

{

int x = random nextInt(width);

int y = random nextInt(height);

int xl = random nextInt( );

int yl = random nextInt( );

g drawLine(x y x+xl y+yl);

}

// 取隨機產生的認證碼( 位數字)

String codeList = ;

String sRand= ;

for (int i= ;i< ;i++){

int a=random nextInt(codeList length() );

String rand=codeList substring(a a+ );

sRand+=rand;

// 將認證碼顯示到圖象中

g setColor(new Color( +random nextInt( ) +random nextInt( ) +random nextInt( )));//調用函數出來的顏色相同 可能是因為種子太接近 所以只能直接生成

g drawString(rand *i+ );

}

// 將認證碼存入SESSION

session setAttribute( rand sRand);

// 圖象生效

g dispose();

// 輸出圖象到頁面

ImageIO write(image JPEG response getOutputStream());

out clear();

out = pageContext pushBody();

lishixin/Article/program/Java/hx/201311/25536

閱讀全文

與生成驗證碼的java代碼相關的資料

熱點內容
同一設備復制文件夾 瀏覽:59
彩信是哪個文件夾 瀏覽:878
安卓用什麼軟體可以看電視直播 瀏覽:323
linuxmemcached命令行 瀏覽:819
程序員常用的導圖工具 瀏覽:191
怎麼查找已加密的人 瀏覽:722
北漂程序員懷孕吃剩飯 瀏覽:373
ibmlinux系統 瀏覽:625
javaweb插件開發 瀏覽:347
網頁編程有什麼好處 瀏覽:258
新重慶app干什麼的 瀏覽:584
cad計算體積命令 瀏覽:174
程序員內卷前景 瀏覽:398
為什麼同樣的腳本編譯不能通過 瀏覽:968
華為手錶如何復制加密門禁卡 瀏覽:255
什麼app可以看到自己駕考成績 瀏覽:350
自製方便袋的解壓玩具 瀏覽:327
伺服器報uc1是什麼 瀏覽:264
python腳本傳參數 瀏覽:723
php商業源碼 瀏覽:909