国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java生成四位數(shù)隨機(jī)驗(yàn)證碼

這篇具有很好參考價(jià)值的文章主要介紹了Java生成四位數(shù)隨機(jī)驗(yàn)證碼。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

引言:

我們生活中登錄的時(shí)候都要輸入驗(yàn)證碼,這些驗(yàn)證碼是為了增加注冊(cè)或者登錄難度,減少被人用腳本瘋狂登錄注冊(cè)導(dǎo)致的一系列危害,減少數(shù)據(jù)庫(kù)的一些壓力。
畢竟那些用腳本生成的賬號(hào)都是垃圾賬號(hào)

本次實(shí)踐:生成這樣的驗(yàn)證碼

Java生成四位數(shù)隨機(jī)驗(yàn)證碼,java,開發(fā)語(yǔ)言
并且附帶一些干擾線

項(xiàng)目想法:

我們生成一個(gè)驗(yàn)證碼有好幾個(gè)要求

1.驗(yàn)證碼必須是隨機(jī)的,每次都不能重復(fù)出現(xiàn)一模一樣的
2.驗(yàn)證碼得讓人有體驗(yàn)感,最起碼得看得清,大小要合適
3.驗(yàn)證碼初步需要一些干擾線,防止很輕易的就被腳本識(shí)別出來(lái)。

初步學(xué)習(xí)先以這些為要求進(jìn)行實(shí)踐。

項(xiàng)目思路:

我們要理解這個(gè)驗(yàn)證碼的生成過(guò)程。

1.我們需要有一個(gè)畫板
2.我們需要一只筆可以在畫板上涂鴉
3.我們需要用筆在畫板上畫字符
4.我們需要調(diào)節(jié)畫板和字符的顏色,及其大小,提升體驗(yàn)感
5.我們需要畫出干擾線

項(xiàng)目實(shí)踐:

1.我們需要一些字母或者數(shù)字,這樣組成隨機(jī)的四位驗(yàn)證碼

我們可以寫一個(gè)程序快速生成這樣的數(shù)組

public class Zifu {
    public static void main(String[] args) {
        for(int i=0; i<26; i++){
            char ch = (char) ('a' + i); // 生成字母
            if (i != 25) {
                System.out.print("\"" + ch + "\", ");
            } else {
                System.out.print("\"" + ch + "\"");
            } 
        }
        for(int i=0; i<10; i++){
            char ch=(char)('0'+i);
            if (i != 9) {
                System.out.print("\"" + ch + "\", ");
            } else {
                System.out.print("\"" + ch + "\"");
            } 
        }
        for(int i=0; i<26; i++){
            char ch = (char) ('A' + i); // 生成字母
            if (i != 25) {
                System.out.print("\"" + ch + "\", ");
            } else {
                System.out.print("\"" + ch + "\"");
            } 
        }
    }
}

輸出為:
Java生成四位數(shù)隨機(jī)驗(yàn)證碼,java,開發(fā)語(yǔ)言

然后我們將其復(fù)制粘貼在靜態(tài)數(shù)組里面
Java生成四位數(shù)隨機(jī)驗(yàn)證碼,java,開發(fā)語(yǔ)言
這樣我們就準(zhǔn)備好我們所需要的數(shù)組了

2.怎樣畫圖

畫圖的思路是:

1.準(zhǔn)備畫板
2.準(zhǔn)備筆
3.然后筆在畫板上畫

如何準(zhǔn)備畫板?
Java生成四位數(shù)隨機(jī)驗(yàn)證碼,java,開發(fā)語(yǔ)言
先導(dǎo)入相關(guān)包,畫板有專門的類是BufferedImage
筆相關(guān)的包是,Graphics

3.創(chuàng)建畫板

創(chuàng)建畫板要先實(shí)例化一個(gè)畫板,然后補(bǔ)充寬高和組成

        int height=200;//高
        int width=400;//寬
        int imageType = BufferedImage.TYPE_INT_RGB;//畫板的組成,rgb是red,green,blue,紅綠藍(lán)組成
        BufferedImage image = new BufferedImage(width,height,imageType);//實(shí)例化畫板對(duì)象,三個(gè)參數(shù)

Java生成四位數(shù)隨機(jī)驗(yàn)證碼,java,開發(fā)語(yǔ)言
代碼運(yùn)行后生成的jpg文件
Java生成四位數(shù)隨機(jī)驗(yàn)證碼,java,開發(fā)語(yǔ)言

4.生成隨機(jī)驗(yàn)證碼

這里需要用到random模塊

r是實(shí)例化Random的對(duì)象,r.newInt(界限),可以幫我們生成0到界限-1之間的隨機(jī)數(shù)值,我們可以通過(guò)它去隨機(jī)選取字符數(shù)組的下標(biāo)

Java生成四位數(shù)隨機(jī)驗(yàn)證碼,java,開發(fā)語(yǔ)言
生成的效果圖為
Java生成四位數(shù)隨機(jī)驗(yàn)證碼,java,開發(fā)語(yǔ)言

5.生成干擾線

干擾線原理其實(shí)與生成字符一樣

生成的重要代碼是g.drawLine(x1,y1,x2,y2);
意思是兩個(gè)點(diǎn)(x1,y1),(x2,y2)之間畫條直線

Java生成四位數(shù)隨機(jī)驗(yàn)證碼,java,開發(fā)語(yǔ)言

生成的效果圖為:

Java生成四位數(shù)隨機(jī)驗(yàn)證碼,java,開發(fā)語(yǔ)言

本次項(xiàng)目的小知識(shí)點(diǎn)

1.畫板有java自帶的BufferedImage,我們只需要導(dǎo)包就好了
2.筆有java自帶的Graphice,也是只要導(dǎo)包就好了
3.畫字符的時(shí)候字符的位置以及橫坐標(biāo)偏移,如果不偏移兩次畫在同一個(gè)地方就會(huì)覆蓋掉
4.字符的顏色,字體可以通過(guò)Font去設(shè)置
5.最后就是將畫出的圖生成在本地了

tips:最好的方法就是每做出一步就把圖生成在本地查看情況然后根據(jù)需求進(jìn)行調(diào)整,我上面的步驟就是一步一步來(lái)的。

本次驗(yàn)證碼生成的整體代碼如下:
文件路徑我就刪了,需要的朋友們自己補(bǔ)充吧,隨便找個(gè)空的文件夾然后復(fù)制地址就好了

格式是這樣的:
Java生成四位數(shù)隨機(jī)驗(yàn)證碼,java,開發(fā)語(yǔ)言
tips:為什么我用的都是\\,因?yàn)槿绻菃涡备艿脑捨业膙scode會(huì)識(shí)別為轉(zhuǎn)義字符,所以都用雙斜杠了\\

整體代碼如下:

import java.awt.Color; // 引入 Color 類,提供系統(tǒng)顏色和關(guān)于顏色空間的類。
import java.awt.Font; // 引入 Font 類,支持在AWT的所有渲染環(huán)境下的通用文字布局,并為所有給定字符和腳本提供字體處理功能。
import java.awt.Graphics; // 引入 Graphics 類,允許應(yīng)用程序以協(xié)同的方式繪制到屏幕上或者其他任何地方。
import java.awt.image.BufferedImage; // 引入 BufferedImage 類,描述一些整數(shù)像素的具有可訪問(wèn)的數(shù)據(jù)緩沖區(qū)的圖像。
import java.io.File; // 引入 File 類,它提供了與文件和路徑名相關(guān)的操作,它具有創(chuàng)建、刪除、讀取文件等功能。
import java.io.IOException; // 引入 IOException 類,處理輸入、輸出操作失敗或中斷的情況(類似于文件未找到等)。
import java.util.Random; // 引入 Random 類,用于生成偽隨機(jī)數(shù)。
import javax.imageio.ImageIO; // 引入 ImageIO 類,用于讀取和寫入圖像格式,如 JPEG、PNG等。

public class checkimage {
    static String[] strs={"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","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"};
    
    public static void main(String[] args) {
        int height=200;//高
        int width=400;//寬
        int imageType = BufferedImage.TYPE_INT_RGB;//畫板的組成,rgb是red,green,blue,紅綠藍(lán)組成
        BufferedImage image = new BufferedImage(width,height,imageType);//實(shí)例化畫板對(duì)象,三個(gè)參數(shù)
        
        Graphics g = image.getGraphics();//實(shí)例化了一支筆
        g.setColor(Color.white);//筆的顏色為白色
        g.fillRect(0, 0, width, height);//然后將畫板填充為白色,x,y為矩形左上角的坐標(biāo)
        /*設(shè)置畫板 */

        Random r=new Random();//實(shí)例化一個(gè)隨機(jī)的對(duì)象
        int x=25,y=125;//這個(gè)是x,y界限
        g.setColor(Color.blue);//讓驗(yàn)證碼的顏色為藍(lán)色
        g.setFont(new Font("宋體",Font.PLAIN,100));//設(shè)置字體,字體為宋體,并且大小為100
        for(int i=0;i<4;i++){//用for循環(huán)生成4個(gè)隨機(jī)驗(yàn)證碼
            int index=r.nextInt(62);//strs數(shù)組總共62個(gè)數(shù),所以下標(biāo)界限是0-61
            String str=strs[index];//隨機(jī)取一個(gè)字符
            g.drawString(str, x, y);//畫字符在畫板上
            x+=100;//這個(gè)移位,不然我第一次在這個(gè)位置畫A,第二次畫B的時(shí)候還在這個(gè)位置不就覆蓋掉了嗎,所以要移動(dòng)位置
        }
        /*畫出四位數(shù)的驗(yàn)證碼 */

        g.setColor(Color.green);//讓畫筆的顏色為綠色
        for(int i=0;i<10;i++){//生成十條干擾線
            int a=r.nextInt(10);
            int b=r.nextInt(400);
            int c=r.nextInt(10)+380;
            int d=r.nextInt(400);
            g.drawLine(a,b,c,d);//ab是干擾線的左邊的橫縱坐標(biāo),cd是右邊的
        }        
        /*畫出干擾線 */

        // 嘗試寫入圖像
        try {
            ImageIO.write(image, "jpg", new File("C:\\Users\\Desktop\\項(xiàng)目學(xué)習(xí)\\myImage.jpg")); //此處應(yīng)給出具體的文件名
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

這是我第一次除了做題之外做出的有用的東西了?。?!
雖然都是照著視頻學(xué)習(xí)照搬的,但是也是第一次對(duì)做這些有那么一點(diǎn)小感悟和經(jīng)歷了!
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-796136.html

到了這里,關(guān)于Java生成四位數(shù)隨機(jī)驗(yàn)證碼的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【論壇java項(xiàng)目】第二章 Spring Boot實(shí)踐,開發(fā)社區(qū)登錄模塊:發(fā)送郵件、開發(fā)注冊(cè)功能、會(huì)話管理、生成驗(yàn)證碼、開發(fā)登錄、退出功能、

    【論壇java項(xiàng)目】第二章 Spring Boot實(shí)踐,開發(fā)社區(qū)登錄模塊:發(fā)送郵件、開發(fā)注冊(cè)功能、會(huì)話管理、生成驗(yàn)證碼、開發(fā)登錄、退出功能、

    ??如果對(duì)你有幫助的話?? ??為博主點(diǎn)個(gè)贊吧 ?? ??點(diǎn)贊是對(duì)博主最大的鼓勵(lì)?? ??愛心發(fā)射~?? bofryuzursekbiab——密碼 訪問(wèn)郵箱域名 郵箱端口 賬號(hào) 密碼 協(xié)議 詳細(xì)配置 JavaMailSender 是 Spring Email 的核心組件,負(fù)責(zé)發(fā)送郵件 MimeMessage 用于封裝郵件的相關(guān)信息 MimeMessageHelper 用

    2024年02月06日
    瀏覽(33)
  • 【Java】Java如何生成隨機(jī)數(shù)?

    【Java】Java如何生成隨機(jī)數(shù)?

    我們?cè)趯W(xué)習(xí) Java 基礎(chǔ)時(shí)就知道可以生成隨機(jī)數(shù),可以為我們枯燥的學(xué)習(xí)增加那么一丟丟的樂趣。本文就來(lái)介紹 Java 隨機(jī)數(shù)。 在 Java 中使用 Random 工具類來(lái)生成隨機(jī)數(shù),該類在 java.util 包下,在 JDK1.0 版本就存在了。Random 單詞本身就是隨機(jī)、隨意、任意的意思。Random 是一個(gè)普通

    2024年02月12日
    瀏覽(23)
  • java生成隨機(jī)數(shù)

    java生成隨機(jī)數(shù)

    ?? bound 必須是正數(shù)。 以下代碼生成的是 0 到 30 的隨機(jī)數(shù)。 生成區(qū)間的隨機(jī)數(shù):[最小值,最大值] 學(xué)的不是技術(shù),更是夢(mèng)想?。?!

    2024年02月07日
    瀏覽(37)
  • java生成隨機(jī)字符串的方法

    java生成隨機(jī)字符串的方法

    ? 今天我們來(lái)學(xué)習(xí)下隨機(jī)數(shù)的生成,隨機(jī)數(shù)就是不確定的數(shù),它可以是任意一個(gè)整數(shù)或者字符串。下面就讓我們一起來(lái)學(xué)習(xí)下隨機(jī)字符串的生成吧。 首先,我們需要先定義一個(gè)名為 str的數(shù)組,并將它作為輸入文件。 1、使用 Java中的 str作為輸入文件。 2、然后將這個(gè)字符串復(fù)

    2024年02月16日
    瀏覽(26)
  • java生成指定區(qū)間的隨機(jī)數(shù)

    java生成指定區(qū)間的隨機(jī)數(shù)

    隨機(jī)數(shù) 例:編寫程序隨機(jī)生成k個(gè)位于[m,n]區(qū)間的整數(shù),對(duì)這k個(gè)數(shù)據(jù)進(jìn)行升序排序并輸出。 在使用Java生成隨機(jī)數(shù)的時(shí)候,有一些注意事項(xiàng)需要注意,下面是一些常見的問(wèn)題和解決方案: 1. 生成隨機(jī)數(shù)時(shí),應(yīng)該使用Java的 Random 類,而不是 Math.random() 方法。原因是, Math.rando

    2024年02月10日
    瀏覽(26)
  • Java jdk8生成隨機(jī)數(shù)

    目錄 Jdk8生成隨機(jī)數(shù) Jdk8以前 在Java 8中,可以使用ThreadLocalRandom類來(lái)生成隨機(jī)數(shù)。相比于早期的Random類,ThreadLocalRandom類可以更好地支持多線程應(yīng)用,性能也更優(yōu)。下面是使用ThreadLocalRandom類生成隨機(jī)數(shù)的幾種方法: 生成一個(gè)0到n之間的隨機(jī)整數(shù)(不包含n): 生成一個(gè)范圍在

    2024年02月12日
    瀏覽(13)
  • 后臺(tái)生成隨機(jī)驗(yàn)證碼驗(yàn)證登錄

    后臺(tái)生成隨機(jī)驗(yàn)證碼驗(yàn)證登錄

    ?web get請(qǐng)求獲取圖片 后臺(tái)代碼: 登錄驗(yàn)證: ?

    2024年01月16日
    瀏覽(14)
  • Java如何生成隨機(jī)數(shù)?要不要了解一下!

    Java如何生成隨機(jī)數(shù)?要不要了解一下!

    我們?cè)趯W(xué)習(xí) Java 基礎(chǔ)時(shí)就知道可以生成隨機(jī)數(shù),可以為我們枯燥的學(xué)習(xí)增加那么一丟丟的樂趣。本文就來(lái)介紹 Java 隨機(jī)數(shù)。 在 Java 中使用 Random 工具類來(lái)生成隨機(jī)數(shù),該類在 java.util 包下,在 JDK1.0 版本就存在了。 Random 單詞本身就是隨機(jī)、隨意、任意的意思。 Random 是一個(gè)普

    2024年02月06日
    瀏覽(25)
  • Java隨機(jī)生成字符串的4種方式

    java.util.UUID 類可用于生成UUID, 它的static randomUUID方法返回一個(gè)32個(gè)字符的字符串。 注意randomUUID方法生成的字符串包含“-”。上面的示例通過(guò)使用空字符串替換了。 以上程序輸出為: 下面的算法可以使用這種方法生成一個(gè)固定長(zhǎng)度的隨機(jī)字符串。 初始化一個(gè)空字符串以保存結(jié)

    2024年02月08日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包