❶ java驗證碼的實現 需要知道嗎
一.什麼是驗證碼及它的作用
:驗證碼為全自動區分計算機和人類的圖靈測試的縮寫,是一種區分用戶是計算機的公共全自動程序,這個問題可以由計算機生成並評判,但是必須只有人類才能解答.可以防止惡意破解密碼、刷票、論壇灌水、有效防止某個黑客對某一個特定注冊用戶用特定程序暴力破解方式進行不斷的登錄。
二.圖文驗證碼的原理
:在servlet中隨機生成一個指定位置的驗證碼,一般為四位,然後把該驗證碼保存到session中.在通過Java的繪圖類以圖片的形式輸出該驗證碼。為了增加驗證碼的安全級別,可以輸出圖片的同時輸出干擾線,最後在用戶提交數據的時候,在伺服器端將用戶提交的驗證碼和Session保存的驗證碼進行比較。
三.驗證碼所需的技術
:i.因為驗證碼中的文字,數字,應為都是可變的,故要用到隨機生成數技術。
ii.如果驗證碼中包含漢字,則要用到漢字生成技術.
iii.可以使用Ajax技術實現局部刷新
iv.可以使用圖片的縮放和旋轉技術,
vi.隨機繪制干擾線(可以是折現,直線等)
vii.如果考慮到驗證碼的安全性,可以使用MD5加密.
❷ 用java怎麼製作驗證碼
驗證方法很多
蠢一點的後台寫代碼,或者前台頁面加js
當然你用框架自帶的也行,例如struts的
❸ java如何實現6位數字簡訊驗證碼
例如網易雲信,需要你在
//網易雲信分配的密鑰,請替換你在管理後台應用下申請的appSecret
private static final String APP_SECRET="aa6d416fdd4e";
//驗證碼長度,范圍4~10,默認為4
private static final String CODELEN="6";
這里有免費試學的視頻供你參考學習:
❹ java怎麼生成驗證碼圖片
以下僅供參考:
這是jsp頁面,起個名字例如叫image.jsp:
<%@ page contentType="image/JPEG"
import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*"
pageEncoding="GBK"%><%!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);
}%><%
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
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(getRandColor(160, 200));
for (int i = 0; i < 100; 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);
}
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)));
g.drawString(rand, 13 * i + 6, 16);
}
session.setAttribute("code", sRand);
g.dispose();
ImageIO.write(image, "JPEG", response.getOutputStream());
%>
在你需要引入的地方:
<img border=0 src="image.jsp">
就可以了。。。
❺ java怎麼實現隨機4個帶有數字和字母的驗證碼
importjava.awt.Color;
importjava.awt.Font;
importjava.awt.Graphics;
importjava.awt.image.BufferedImage;
importjava.util.Random;
importjavax.imageio.ImageIO;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importjavax.servlet.http.HttpSession;
publicclassRandomValidateCode{
="RANDOMVALIDATECODEKEY";//放到session中的key
privateRandomrandom=newRandom();
privateStringrandString="";//隨機產生的字元串
privateintwidth=80;//圖片寬
privateintheight=26;//圖片高
privateintlineSize=40;//干擾線數量
privateintstringNum=4;//隨機產生字元數量
/*
*獲得字體
*/
privateFontgetFont(){
returnnewFont("Fixedsys",Font.CENTER_BASELINE,18);
}
/*
*獲得顏色
*/
privateColorgetRandColor(intfc,intbc){
if(fc>255)
fc=255;
if(bc>255)
bc=255;
intr=fc+random.nextInt(bc-fc-16);
intg=fc+random.nextInt(bc-fc-14);
intb=fc+random.nextInt(bc-fc-18);
returnnewColor(r,g,b);
}
/**
*生成隨機圖片
*/
publicvoidgetRandcode(HttpServletRequestrequest,
HttpServletResponseresponse){
HttpSessionsession=request.getSession();
//BufferedImage類是具有緩沖區的Image類,Image類是用於描述圖像信息的類
BufferedImageimage=newBufferedImage(width,height,BufferedImage.TYPE_INT_BGR);
Graphicsg=image.getGraphics();//產生Image對象的Graphics對象,改對象可以在圖像上進行各種繪制操作
g.fillRect(0,0,width,height);
g.setFont(newFont("TimesNewRoman",Font.ROMAN_BASELINE,18));
g.setColor(getRandColor(110,133));
//繪制干擾線
for(inti=0;i<=lineSize;i++){
drowLine(g);
}
//繪制隨機字元
StringrandomString="";
for(inti=1;i<=stringNum;i++){
randomString=drowString(g,randomString,i);
}
session.removeAttribute(RANDOMCODEKEY);
session.setAttribute(RANDOMCODEKEY,randomString);
System.out.println(randomString);
g.dispose();
try{
ImageIO.write(image,"JPEG",response.getOutputStream());//將內存中的圖片通過流動形式輸出到客戶端
}catch(Exceptione){
e.printStackTrace();
}
}
/*
*繪制字元串
*/
privateStringdrowString(Graphicsg,StringrandomString,inti){
g.setFont(getFont());
g.setColor(newColor(random.nextInt(101),random.nextInt(111),random.nextInt(121)));
Stringrand=String.valueOf(getRandomString(random.nextInt(randString.length())));
randomString+=rand;
g.translate(random.nextInt(3),random.nextInt(3));
g.drawString(rand,13*i,16);
returnrandomString;
}
/*
*繪制干擾線
*/
privatevoiddrowLine(Graphicsg){
intx=random.nextInt(width);
inty=random.nextInt(height);
intxl=random.nextInt(13);
intyl=random.nextInt(15);
g.drawLine(x,y,x+xl,y+yl);
}
/*
*獲取隨機的字元
*/
publicStringgetRandomString(intnum){
returnString.valueOf(randString.charAt(num));
}
}
❻ java簡訊驗證碼要注意什麼問題
1、時間間隔
java簡訊自驗證碼並不是你請求幾次都可以的。一般來講在同一個時刻同一部手機發送的同一個請求,一般次數上不會超過三次,時間間隔上會有一分鍾的限定,這是為了避免有些用戶頻繁無效的胡亂點擊或惡意搗亂,影響正常的系統工作,讓有需求的朋友無法正常完成驗證。
2、次數限制
如果遇到有些用戶總是大量的向後台發送請求,次數過多,頻率過大,同一個手機號一天的時間里,超過了一定次數的請求數,那麼該手機號會被認定為一個危險號,有可能會被系統列入黑名單之中,使得下次將無法實現請求驗證。
3、錯誤限定
當用戶對於同個類型的需求進行不斷的驗證,比如說更改密碼、注冊時發送的java簡訊驗證碼,在輸入時的錯誤次數也是有限制的。因為正常、規范的簡訊驗證碼的發送只用很短時間用戶就可以准確接收到,但如果用戶總是不能正確輸入,次數超過了三次的話,就會讓其驗證碼無效,避免有人惡意嘗試輸入,確保用戶的賬戶安全。
簡訊驗證碼在我們日常生活中扮演了及其重要的地位,是保障我們現在互聯網信息的主流安全手段,因此在開發java簡訊驗證碼以及後期的維護中,都不可忽略其安全性。java簡訊驗證碼接入廣東第五大道還可以,提供簡訊驗證碼測試。
❼ 用java生成6位驗證碼,要求字母大小寫數字組成,不能重復字元
public class GenerateRandomLetterAndNum {
public static void main(String[] args) {
Set<String> store = getletterandnum(6);
printSet(store);
}
public static Set<String> getletterandnum(int length) {
Set<String> set =new HashSet<String>();
for (int i = 0; i < length; i++) {
String value = getrandom();
set.add(value);
}
if (set.size()<length) { //如果沒有生成6位
String value = getrandom();//繼續調用生成隨機數的方法
set.add(value);
}
return set;
}
private static String getrandom() { //生成隨機字母和數字方法
String value = "";
Random random = new Random();
int gen = random.nextInt(2);//0、1、2
String charornum = gen % 2 == 0 ? "char" : "num";
if ("char".equals(charornum)) {
int temp = random.nextInt(2) % 2 == 0 ? 65 : 97;
int ascii = random.nextInt(26);
value += (char) (ascii + temp);
} else if ("num".equalsIgnoreCase(charornum)) {
value += String.valueOf(random.nextInt(10));
}
return value;
}
public static void printSet(Set set){ //列印set的方法
Iterator iterator = set.iterator();
while (iterator.hasNext()) {
String ele = (String) iterator.next();
System.out.print(ele+" ");
}
}