java驗證碼生成,java登錄驗證碼怎麼做

本文目錄一覽:

用java生成6位驗證碼,要求字母大小寫數字組成,不能重複字元

public class GenerateRandomLetterAndNum {

public static void main(String[] args) {

SetString store = getletterandnum(6);

printSet(store);

}

public static SetString getletterandnum(int length) {

SetString set =new HashSetString();

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+” “);

}

}

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

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

public class GenerateRandomLetterAndNum {

public static void main(String[] args) {

 SetString store = getletterandnum(6);

 

 printSet(store);

}

public static SetString getletterandnum(int length) {

SetString set =new HashSetString();

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+” “);

    }

}

怎麼用Java代碼實現一個驗證碼,求具體實現方法

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 {

    

    // 驗證碼字符集

    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’};

    // 字元數量

    private static final int SIZE = 4;

    // 干擾線數量

    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;

    /**

     * 生成隨機驗證碼及圖片

     * 返回的數組中,第1個值是驗證碼,第2個值是圖片

     */

    public static Object[] createImage() {

        StringBuffer sb = new StringBuffer();

        // 1.創建空白圖片

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

    }

}

用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=”ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789″;

//緩存生成的驗證碼

StringBuffer stringbuffer=new StringBuffer();

//隨機生成驗證碼的顏色和字元

for(int i=0;i4;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代碼段生成四位數字加字母的驗證碼?

不知道你問的是不是生成這種圖片驗證碼?如果只要一個隨機四位數 那這行代碼就夠了(new Random().nextInt(9000) + 1000;),如果是生成頁面圖片驗證碼就是下面的了: //設定 響應模式 resp.setContentType(“image/jpeg”); // 生成令牌環數據; Integer token = new Random().nextInt(9000) + 1000; // 保存令牌環數據到session中 req.getSession().setAttribute(IMAGE_TOKEN_NAME, token); // 生成令牌環圖片 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();

下面簡單的介紹他們的功能和用途,執行效率等。每個都有各自的優缺點看你是做甚什麼方面的研究開發用。.net,是網站編程,現在很多都用這個,但是這個語言編程都有統一思路,很好掌握。窒息那個效率不是很高;php 支持跨平台,很容易學會,執行的效率很高;asp是ASP.net的前身,它比較穩定,比.net要弱一點。但是比.net好學。jsp 是網頁編程,這個學習大約一周就能搞定,不過這個得多實踐,不然的話,時間長了,就容易忘記。

我自己做的系統裡面用作驗證碼的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

java 登陸時的驗證碼怎麼做?

後台寫一個生成圖片隨機的代碼,生成圖片給前台。切換圖片的時候,使用ajax獲取圖片數據就行。

附上生成圖片的代碼

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

// 創建一個隨機數生成器類

Random random = new Random();

// 將圖像填充為白色

g.setColor(Color.WHITE);

g.fillRect(0, 0, width, height);

// 創建字體,字體的大小應該根據圖片的高度來定。

Font font = new Font(“Fixedsys”, Font.PLAIN, fontHeight);

// 設置字體。

g.setFont(font);

// 畫邊框。

g.setColor(Color.BLACK);

g.drawRect(0, 0, width – 1, height – 1);

// randomCode用於保存隨機產生的驗證碼,以便用戶登錄後進行驗證。

StringBuffer randomCode = new StringBuffer();

int red = 0, green = 0, blue = 0;

// 隨機產生codeCount數字的驗證碼。

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

// 得到隨機產生的驗證碼數字。

String strRand = String.valueOf(codeSequence[random.nextInt(62)]);

// 產生隨機的顏色分量來構造顏色值,這樣輸出的每位數字的顏色值都將不同。

red = random.nextInt(255);

green = random.nextInt(255);

blue = random.nextInt(255);

// 用隨機產生的顏色將驗證碼繪製到圖像中。

g.setColor(new Color(red, green, blue));

g.drawString(strRand, (i ) * x+20, codeY);

// 將產生的四個隨機數組合在一起。

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;

}

}

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/288739.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-24 03:00
下一篇 2024-12-24 03:00

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java Bean載入過程

    Java Bean載入過程涉及到類載入器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean載入的過程。 一、類載入器 類載入器是Java虛擬機…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字元串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字元串中是否存在多個指定字元: 一、字元串遍歷 字元串是Java編程中非常重要的一種數據類型。要判斷字元串中是否存在多個指定字元…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29
  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29
  • Java 8 Group By 會影響排序嗎?

    是的,Java 8中的Group By會對排序產生影響。本文將從多個方面探討Group By對排序的影響。 一、Group By的概述 Group By是SQL中的一種常見操作,它…

    編程 2025-04-29

發表回復

登錄後才能評論