說(shuō)個(gè)流程吧
創(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ò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,安順網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
1.去移動(dòng)或者電信申請(qǐng)一個(gè)web接口
2.客戶填寫(xiě)請(qǐng)求輸入手機(jī)號(hào)碼提交
3.調(diào)申請(qǐng)的接口吧(注意給個(gè)對(duì)方(電信或者移動(dòng))的回調(diào)地址吧)
4.從回調(diào)地址里拿客戶輸入的數(shù)據(jù)了,判斷數(shù)據(jù)了
5.返回?cái)?shù)據(jù)給客戶了
純屬個(gè)人理解
生成code.jsp文件的完整代碼如下:
%@ page language="java" contentType="image/jpeg; charset=gb2312"
pageEncoding="gb2312"%
%@ page import="java.awt.*,java.awt.image.*" %
%@ page import="java.util.*,javax.imageio.*" %
%!
Color getRandColor(int fc,int bc){
Random r=new Random();
if(fc255) fc=255;
if(bc200) bc=255;
int red=fc+r.nextInt(bc-fc);
int green=fc+r.nextInt(bc-fc);
int blue=fc+r.nextInt(bc-fc);
return new Color(red,green,blue);
}%
% //設(shè)置頁(yè)面不緩存
response.setHeader("Pragma","No-cache");
response.setHeader("cache-Control","no-cache");
response.setDateHeader("Expires",0);
//創(chuàng)建隨機(jī)類
Random r=new Random();
//在內(nèi)存中創(chuàng)建圖像,寬度,高度
int width=80,height=30;
BufferedImage pic=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
//獲取圖形上下文環(huán)境
Graphics gc=pic.getGraphics();
//設(shè)定背景顏色并進(jìn)行填充
gc.setColor(getRandColor(200,250));
gc.fillRect(0,0,width,height);
//設(shè)定圖形上下文環(huán)境字體
gc.setFont(new Font("Times New Roman",Font.PLAIN,20));
//畫(huà)邊框
//gc.setColor(new Color(1));
//gc.drawRect(0,0,width-1,height-1);
//隨機(jī)產(chǎn)生200條干擾直線,使圖像中的認(rèn)證碼不易被其他分析程序探測(cè)
gc.setColor(getRandColor(160,200));
for(int i=0;i200;i++)
{
int x1=r.nextInt(width);
int y1=r.nextInt(height);
int x2=r.nextInt(15);
int y2=r.nextInt(15);
gc.drawLine(x1,y1,x1+x2,y1+y2);
}
//隨即產(chǎn)生100個(gè)干擾點(diǎn)
gc.setColor(getRandColor(120,240));
for(int i=1;i100;i++){
int x=r.nextInt(width);
int y=r.nextInt(height);
gc.drawOval(x,y,0,0);
}
//隨機(jī)產(chǎn)生四位數(shù)字的驗(yàn)證碼
String RS="";
String rn="";
for(int i=0;i4;i++)
{
//產(chǎn)生十以內(nèi)隨機(jī)數(shù)字
rn=String.valueOf(r.nextInt(10));
RS+=rn;
//將認(rèn)證碼用drawString函數(shù)顯示到圖像里
gc.setColor(new Color(20+r.nextInt(110),20+r.nextInt(110),20+r.nextInt(110)));//使字體顏色效果明顯
gc.drawString(rn,13*i+16,16);
}
//釋放圖形上下文環(huán)境
gc.dispose();
//將認(rèn)證碼RS存入session中共享
session.setAttribute("random",RS);
//輸出生成后的圖象到頁(yè)面
ImageIO.write(pic,"JPEG",response.getOutputStream());
out.clear();
out = pageContext.pushBody();
%
使用隨即碼的jsp文件中加入下面一句即可
image src="code.jsp"
驗(yàn)證碼獲取JAVA采用http鏈接請(qǐng)求就可以,不過(guò)驗(yàn)證碼無(wú)法識(shí)別,多數(shù)驗(yàn)證碼都是圖片,又有很多干擾線,目前沒(méi)有高效識(shí)別方法。用個(gè)IE抓包工具,看每次提交都有什么數(shù)據(jù)。
首先你要找一家靠譜的短信平臺(tái),他們會(huì)提供你一份對(duì)接的協(xié)議。
巴卜短信平臺(tái)會(huì)給到你相應(yīng)語(yǔ)言的示例代碼,而且還會(huì)針對(duì)驗(yàn)證碼給你提供一些解決方案,避免你的網(wǎng)站系統(tǒng)或app被惡意的刷碼。
給你一個(gè)提示,其一,寫(xiě)一個(gè)工具類,就是用隨機(jī)數(shù)那個(gè),去畫(huà)個(gè)圖片,并而,劃一些線,就是一個(gè)驗(yàn)證碼,這個(gè)網(wǎng)上有現(xiàn)成的。
其二,就是用acegi -security框架。這個(gè)通過(guò)aop,配置在spring實(shí)現(xiàn)。網(wǎng)上的例子和書(shū)都有的。所以,感覺(jué)沒(méi)有必要在這里貼出來(lái)。如果你一定要貼出來(lái),只能說(shuō)你必不適合干編程。呵呵。
package?util;
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.獲取圖片畫(huà)筆
Graphics?graphic?=?image.getGraphics();
//?3.設(shè)置畫(huà)筆顏色
graphic.setColor(Color.LIGHT_GRAY);
//?4.繪制矩形背景
graphic.fillRect(0,?0,?WIDTH,?HEIGHT);
//?5.畫(huà)隨機(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));
//?畫(huà)字符
graphic.drawString(
chars[n]?+?"",?i?*?WIDTH?/?SIZE,?HEIGHT?/?2);
//?記錄字符
sb.append(chars[n]);
}
//?6.畫(huà)干擾線
for?(int?i?=?0;?i??LINES;?i++)?{
//?設(shè)置隨機(jī)顏色
graphic.setColor(getRandomColor());
//?隨機(jī)畫(huà)線
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();
}
}