java驗(yàn)證碼代碼實(shí)現(xiàn) java編寫驗(yàn)證碼

怎么用Java代碼實(shí)現(xiàn)一個(gè)驗(yàn)證碼,求具體實(shí)現(xiàn)方法

package?util;

成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),海拉爾企業(yè)網(wǎng)站建設(shè),海拉爾品牌網(wǎng)站建設(shè),網(wǎng)站定制,海拉爾網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,海拉爾網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

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?{

//?驗(yàn)證碼字符集

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;

/**

*?生成隨機(jī)驗(yàn)證碼及圖片

*?返回的數(shù)組中,第1個(gè)值是驗(yàn)證碼,第2個(gè)值是圖片

*/

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.設(shè)置畫筆顏色

graphic.setColor(Color.LIGHT_GRAY);

//?4.繪制矩形背景

graphic.fillRect(0,?0,?WIDTH,?HEIGHT);

//?5.畫隨機(jī)字符

Random?ran?=?new?Random();

for?(int?i?=?0;?i?SIZE;?i++)?{

//?取隨機(jī)字符索引

int?n?=?ran.nextInt(chars.length);

//?設(shè)置隨機(jī)顏色

graphic.setColor(getRandomColor());

//?設(shè)置字體大小

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++)?{

//?設(shè)置隨機(jī)顏色

graphic.setColor(getRandomColor());

//?隨機(jī)畫線

graphic.drawLine(ran.nextInt(WIDTH),?ran.nextInt(HEIGHT),

ran.nextInt(WIDTH),?ran.nextInt(HEIGHT));

}

//?7.返回驗(yàn)證碼和圖片

return?new?Object[]{sb.toString(),?image};

}

/**

*?隨機(jī)取色

*/

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

}

}

怎樣用java實(shí)現(xiàn)驗(yàn)證碼

現(xiàn)在許多系統(tǒng)的注冊 登錄或者發(fā)布信息模塊都添加的隨機(jī)驗(yàn)證碼功能 就是為了避免自動(dòng)注冊程序或者自動(dòng)發(fā)布程序的使用

驗(yàn)證碼實(shí)際上就是隨機(jī)選擇一些字符以圖片的形式展現(xiàn)在頁面上 如果進(jìn)行提交操作的同時(shí)需要將圖片上的字符同時(shí)提交 如果提交的字符與服務(wù)器session保存的不同 則認(rèn)為提交信息無效 為了避免自動(dòng)程序分析解析圖片 通常會(huì)在圖片上隨機(jī)生成一些干擾線或者將字符進(jìn)行扭曲 增加自動(dòng)識別驗(yàn)證碼的難度

在這里 我們使用java實(shí)現(xiàn)驗(yàn)證碼

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

%!

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

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

}

%

%

//設(shè)置頁面不緩存

response setHeader( Pragma No cache );

response setHeader( Cache Control no cache );

response setDateHeader( Expires );

// 在內(nèi)存中創(chuàng)建圖象

int width= height= ;

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

// 獲取圖形上下文

Graphics g = image getGraphics();

//生成隨機(jī)類

Random random = new Random();

// 設(shè)定背景色

g setColor(getRandColor( ));

g fillRect( width height);

//設(shè)定字體

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

// 隨機(jī)產(chǎn)生 條干擾線 使圖象中的認(rèn)證碼不易被其它程序探測到

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

}

// 取隨機(jī)產(chǎn)生的認(rèn)證碼( 位數(shù)字)

String codeList = ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ;

String sRand= ;

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

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

String rand=codeList substring(a a+ );

sRand+=rand;

// 將認(rèn)證碼顯示到圖象中

g setColor(new Color( +random nextInt( ) +random nextInt( ) +random nextInt( )));//調(diào)用函數(shù)出來的顏色相同 可能是因?yàn)榉N子太接近 所以只能直接生成

g drawString(rand *i+ );

}

// 將認(rèn)證碼存入SESSION

session setAttribute( rand sRand);

// 圖象生效

g dispose();

// 輸出圖象到頁面

ImageIO write(image JPEG response getOutputStream());

out clear();

out = pageContext pushBody();

lishixinzhi/Article/program/Java/hx/201311/25536

java如何實(shí)現(xiàn)發(fā)送短信驗(yàn)證碼功能?

1、創(chuàng)建一個(gè)Http的模擬請求工具類,然后寫一個(gè)POST方法或者GET方法

/** * 文件說明 * @Description:擴(kuò)展說明 * @Copyright: XXXX dreamtech.com.cn Inc. All right reserved * @Version: V6.0 */package com.demo.util; import java.io.IOException;import java.util.Map; import org.apache.commons.httpclient.HttpClient;import org.apache.commons.httpclient.HttpException;import org.apache.commons.httpclient.SimpleHttpConnectionManager;import org.apache.commons.httpclient.methods.GetMethod;import org.apache.commons.httpclient.methods.PostMethod; /** * @Author: feizi * @Date: XXXX年XX月XX日 XX:XX:XX * @ModifyUser: feizi * @ModifyDate: XXXX年XX月XX日 XX:XX:XX * @Version:V6.0 */public class HttpRequestUtil { /** * HttpClient 模擬POST請求 * 方法說明 * @Discription:擴(kuò)展說明 * @param url * @param params * @return String * @Author: feizi * @Date: XXXX年XX月XX日 XX:XX:XX * @ModifyUser:feizi * @ModifyDate: XXXX年XX月XX日 XX:XX:XX */ public static String postRequest(String url, MapString, String params) { //構(gòu)造HttpClient的實(shí)例 HttpClient httpClient = new HttpClient(); //創(chuàng)建POST方法的實(shí)例 PostMethod postMethod = new PostMethod(url); //設(shè)置請求頭信息 postMethod.setRequestHeader("Connection", "close"); //添加參數(shù) for (Map.EntryString, String entry : params.entrySet()) { postMethod.addParameter(entry.getKey(), entry.getValue()); } //使用系統(tǒng)提供的默認(rèn)的恢復(fù)策略,設(shè)置請求重試處理,用的是默認(rèn)的重試處理:請求三次 httpClient.getParams().setBooleanParameter("http.protocol.expect-continue", false); //接收處理結(jié)果 String result = null; try { //執(zhí)行Http Post請求 httpClient.executeMethod(postMethod); //返回處理結(jié)果 result = postMethod.getResponseBodyAsString(); } catch (HttpException e) { // 發(fā)生致命的異常,可能是協(xié)議不對或者返回的內(nèi)容有問題 System.out.println("請檢查輸入的URL!"); e.printStackTrace(); } catch (IOException e) { // 發(fā)生網(wǎng)絡(luò)異常 System.out.println("發(fā)生網(wǎng)絡(luò)異常!"); e.printStackTrace(); } finally { //釋放鏈接 postMethod.releaseConnection(); //關(guān)閉HttpClient實(shí)例 if (httpClient != null) { ((SimpleHttpConnectionManager) httpClient.getHttpConnectionManager()).shutdown(); httpClient = null; } } return result; } /** * HttpClient 模擬GET請求 * 方法說明 * @Discription:擴(kuò)展說明 * @param url * @param params * @return String * @Author: feizi * @Date: XXXX年XX月XX日 XX:XX:XX * @ModifyUser:feizi * @ModifyDate: XXXX年XX月XX日 XX:XX:XX */ public static String getRequest(String url, MapString, String params) { //構(gòu)造HttpClient實(shí)例 HttpClient client = new HttpClient(); //拼接參數(shù) String paramStr = ""; for (String key : params.keySet()) { paramStr = paramStr + "" + key + "=" + params.get(key); } paramStr = paramStr.substring(1); //創(chuàng)建GET方法的實(shí)例 GetMethod method = new GetMethod(url + "?" + paramStr); //接收返回結(jié)果 String result = null; try { //執(zhí)行HTTP GET方法請求 client.executeMethod(method); //返回處理結(jié)果 result = method.getResponseBodyAsString(); } catch (HttpException e) { // 發(fā)生致命的異常,可能是協(xié)議不對或者返回的內(nèi)容有問題 System.out.println("請檢查輸入的URL!"); e.printStackTrace(); } catch (IOException e) { // 發(fā)生網(wǎng)絡(luò)異常 System.out.println("發(fā)生網(wǎng)絡(luò)異常!"); e.printStackTrace(); } finally { //釋放鏈接 method.releaseConnection(); //關(guān)閉HttpClient實(shí)例 if (client != null) { ((SimpleHttpConnectionManager) client.getHttpConnectionManager()).shutdown(); client = null; } } return result; }}

2、在創(chuàng)建一個(gè)類,生成驗(yàn)證碼,然后傳遞相應(yīng)的參數(shù)(不同的短信平臺接口會(huì)有不同的參數(shù)要求,這個(gè)一般短信平臺提供的接口文檔中都會(huì)有的,直接看文檔然后按要求來即可)

/** * 文件說明 * @Description:擴(kuò)展說明 * @Copyright: XXXX dreamtech.com.cn Inc. All right reserved * @Version: V6.0 */package com.demo.util; import java.net.URLEncoder;import java.util.HashMap;import java.util.Map; /** * @Author: feizi * @Date: XXXX年XX月XX日 XX:XX:XX * @ModifyUser: feizi * @ModifyDate: XXXX年XX月XX日 XX:XX:XX * @Version:V6.0 */public class SendMsgUtil { /** * 發(fā)送短信消息 * 方法說明 * @Discription:擴(kuò)展說明 * @param phones * @param content * @return * @return String * @Author: feizi * @Date: 2015年4月17日 下午7:18:08 * @ModifyUser:feizi * @ModifyDate: 2015年4月17日 下午7:18:08 */ @SuppressWarnings("deprecation") public static String sendMsg(String phones,String content){ //短信接口URL提交地址 String url = "短信接口URL提交地址"; MapString, String params = new HashMapString, String(); params.put("zh", "用戶賬號"); params.put("mm", "用戶密碼"); params.put("dxlbid", "短信類別編號"); params.put("extno", "擴(kuò)展編號"); //手機(jī)號碼,多個(gè)號碼使用英文逗號進(jìn)行分割 params.put("hm", phones); //將短信內(nèi)容進(jìn)行URLEncoder編碼 params.put("nr", URLEncoder.encode(content)); return HttpRequestUtil.getRequest(url, params); } /** * 隨機(jī)生成6位隨機(jī)驗(yàn)證碼 * 方法說明 * @Discription:擴(kuò)展說明 * @return * @return String * @Author: feizi * @Date: 2015年4月17日 下午7:19:02 * @ModifyUser:feizi * @ModifyDate: 2015年4月17日 下午7:19:02 */ public static String createRandomVcode(){ //驗(yàn)證碼 String vcode = ""; for (int i = 0; i 6; i++) { vcode = vcode + (int)(Math.random() * 9); } return vcode; } /** * 測試 * 方法說明 * @Discription:擴(kuò)展說明 * @param args * @return void * @Author: feizi * @Date: XXXX年XX月XX日 XX:XX:XX * @ModifyUser:feizi * @ModifyDate: XXXX年XX月XX日 XX:XX:XX */ public static void main(String[] args) {// System.out.println(SendMsgUtil.createRandomVcode());// System.out.println("ecb=12".substring(1)); System.out.println(sendMsg("18123456789,15123456789", "尊敬的用戶,您的驗(yàn)證碼為" + SendMsgUtil.createRandomVcode() + ",有效期為60秒,如有疑慮請?jiān)斣僗XX-XXX-XXXX【XXX中心】")); }

然后執(zhí)行一下,一般的情況下參數(shù)傳遞正確,按照接口文檔的規(guī)范來操作的話,都會(huì)發(fā)送成功的,手機(jī)都能收到驗(yàn)證碼的,然后可能會(huì)出現(xiàn)的問題就是:發(fā)送的短信內(nèi)容有可能會(huì)出現(xiàn)中文亂碼,然后就會(huì)發(fā)送不成功,按照短信平臺的要求進(jìn)行相應(yīng)的編碼即可。一般都會(huì)是UTF-8編碼。

如何用Java代碼段生成四位數(shù)字加字母的驗(yàn)證碼?

不知道你問的是不是生成這種圖片驗(yàn)證碼?如果只要一個(gè)隨機(jī)四位數(shù) 那這行代碼就夠了(new Random().nextInt(9000) + 1000;),如果是生成頁面圖片驗(yàn)證碼就是下面的了: //設(shè)定 響應(yīng)模式 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í)行效率等。每個(gè)都有各自的優(yōu)缺點(diǎn)看你是做甚什么方面的研究開發(fā)用。.net,是網(wǎng)站編程,現(xiàn)在很多都用這個(gè),但是這個(gè)語言編程都有統(tǒng)一思路,很好掌握。窒息那個(gè)效率不是很高;php 支持跨平臺,很容易學(xué)會(huì),執(zhí)行的效率很高;asp是ASP.net的前身,它比較穩(wěn)定,比.net要弱一點(diǎn)。但是比.net好學(xué)。jsp 是網(wǎng)頁編程,這個(gè)學(xué)習(xí)大約一周就能搞定,不過這個(gè)得多實(shí)踐,不然的話,時(shí)間長了,就容易忘記。

我自己做的系統(tǒng)里面用作驗(yàn)證碼的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("當(dāng)前驗(yàn)證碼為:"+session.getAttribute("randNum")); os.flush(); os.close(); os=null; response.flushBuffer(); out.clear(); out = pageContext.pushBody(); % /body/html

文章題目:java驗(yàn)證碼代碼實(shí)現(xiàn) java編寫驗(yàn)證碼
標(biāo)題路徑:http://muchs.cn/article14/ddcdpde.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、用戶體驗(yàn)、品牌網(wǎng)站設(shè)計(jì)網(wǎng)頁設(shè)計(jì)公司、網(wǎng)站收錄、營銷型網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作