java生成驗證碼,java生成驗證碼隨機數

本文目錄一覽:

java如何實現發送短訊驗證碼功能?

1、創建一個Http的模擬請求工具類,然後寫一個POST方法或者GET方法

/** * 文件說明 * @Description:擴展說明 * @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:擴展說明 * @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) { //構造HttpClient的實例 HttpClient httpClient = new HttpClient(); //創建POST方法的實例 PostMethod postMethod = new PostMethod(url); //設置請求頭信息 postMethod.setRequestHeader(“Connection”, “close”); //添加參數 for (Map.EntryString, String entry : params.entrySet()) { postMethod.addParameter(entry.getKey(), entry.getValue()); } //使用系統提供的默認的恢復策略,設置請求重試處理,用的是默認的重試處理:請求三次 httpClient.getParams().setBooleanParameter(“http.protocol.expect-continue”, false); //接收處理結果 String result = null; try { //執行Http Post請求 httpClient.executeMethod(postMethod); //返回處理結果 result = postMethod.getResponseBodyAsString(); } catch (HttpException e) { // 發生致命的異常,可能是協議不對或者返回的內容有問題 System.out.println(“請檢查輸入的URL!”); e.printStackTrace(); } catch (IOException e) { // 發生網絡異常 System.out.println(“發生網絡異常!”); e.printStackTrace(); } finally { //釋放鏈接 postMethod.releaseConnection(); //關閉HttpClient實例 if (httpClient != null) { ((SimpleHttpConnectionManager) httpClient.getHttpConnectionManager()).shutdown(); httpClient = null; } } return result; } /** * HttpClient 模擬GET請求 * 方法說明 * @Discription:擴展說明 * @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) { //構造HttpClient實例 HttpClient client = new HttpClient(); //拼接參數 String paramStr = “”; for (String key : params.keySet()) { paramStr = paramStr + “” + key + “=” + params.get(key); } paramStr = paramStr.substring(1); //創建GET方法的實例 GetMethod method = new GetMethod(url + “?” + paramStr); //接收返回結果 String result = null; try { //執行HTTP GET方法請求 client.executeMethod(method); //返回處理結果 result = method.getResponseBodyAsString(); } catch (HttpException e) { // 發生致命的異常,可能是協議不對或者返回的內容有問題 System.out.println(“請檢查輸入的URL!”); e.printStackTrace(); } catch (IOException e) { // 發生網絡異常 System.out.println(“發生網絡異常!”); e.printStackTrace(); } finally { //釋放鏈接 method.releaseConnection(); //關閉HttpClient實例 if (client != null) { ((SimpleHttpConnectionManager) client.getHttpConnectionManager()).shutdown(); client = null; } } return result; }}

2、在創建一個類,生成驗證碼,然後傳遞相應的參數(不同的短訊平台接口會有不同的參數要求,這個一般短訊平台提供的接口文檔中都會有的,直接看文檔然後按要求來即可)

/** * 文件說明 * @Description:擴展說明 * @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 { /** * 發送短訊消息 * 方法說明 * @Discription:擴展說明 * @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”, “擴展編號”); //手機號碼,多個號碼使用英文逗號進行分割 params.put(“hm”, phones); //將短訊內容進行URLEncoder編碼 params.put(“nr”, URLEncoder.encode(content)); return HttpRequestUtil.getRequest(url, params); } /** * 隨機生成6位隨機驗證碼 * 方法說明 * @Discription:擴展說明 * @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(){ //驗證碼 String vcode = “”; for (int i = 0; i 6; i++) { vcode = vcode + (int)(Math.random() * 9); } return vcode; } /** * 測試 * 方法說明 * @Discription:擴展說明 * @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”, “尊敬的用戶,您的驗證碼為” + SendMsgUtil.createRandomVcode() + “,有效期為60秒,如有疑慮請詳詢XXX-XXX-XXXX【XXX中心】”)); }

然後執行一下,一般的情況下參數傳遞正確,按照接口文檔的規範來操作的話,都會發送成功的,手機都能收到驗證碼的,然後可能會出現的問題就是:發送的短訊內容有可能會出現中文亂碼,然後就會發送不成功,按照短訊平台的要求進行相應的編碼即可。一般都會是UTF-8編碼。

如何用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怎麼製作驗證碼

原理:

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代碼實現一個驗證碼,求具體實現方法

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

    }

}

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

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

相關推薦

  • Java JsonPath 效率優化指南

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

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

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

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

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

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

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

    編程 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
  • Python生成隨機數的應用和實例

    本文將向您介紹如何使用Python生成50個60到100之間的隨機數,並將列舉使用隨機數的幾個實際應用場景。 一、生成隨機數的代碼示例 import random # 生成50個6…

    編程 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

發表回復

登錄後才能評論