最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python創(chuàng)建一個(gè)功能齊全的隨機(jī)驗(yàn)證碼生成器

 更新時(shí)間:2024年04月20日 16:37:11   作者:陳希瑞  
驗(yàn)證碼通過(guò)生成一張包含難以識(shí)別的文本、數(shù)字或圖像的圖像,要求用戶正確輸入其中的內(nèi)容,用于驗(yàn)證用戶身份,本篇教程將帶領(lǐng)您一步步使用Python創(chuàng)建一個(gè)功能齊全的隨機(jī)驗(yàn)證碼生成器,我們將通過(guò)導(dǎo)入必要的庫(kù)、定義輔助函數(shù)以及編寫主函數(shù)check_code()

驗(yàn)證碼(CAPTCHA)是一種常用的用于驗(yàn)證用戶身份的技術(shù)。它通過(guò)生成一張包含難以識(shí)別的文本、數(shù)字或圖像的圖像,要求用戶正確輸入其中的內(nèi)容,用于驗(yàn)證用戶身份、防止自動(dòng)化攻擊和確保數(shù)據(jù)安全。本篇教程將帶領(lǐng)您一步步使用Python創(chuàng)建一個(gè)功能齊全的隨機(jī)驗(yàn)證碼生成器。我們將通過(guò)導(dǎo)入必要的庫(kù)、定義輔助函數(shù)以及編寫主函數(shù)check_code(),來(lái)實(shí)現(xiàn)生成包含隨機(jī)字符、多彩背景、干擾元素及邊緣增強(qiáng)效果的驗(yàn)證碼圖片。讓我們開始動(dòng)手實(shí)踐吧!

1. 導(dǎo)入所需庫(kù)

首先,我們需要引入以下幾個(gè)Python庫(kù)來(lái)支持驗(yàn)證碼生成過(guò)程中的圖像處理和隨機(jī)數(shù)生成:

import random
from PIL import Image, ImageDraw, ImageFont, ImageFilter

random庫(kù):用于生成各種隨機(jī)數(shù),包括字符選擇、顏色值確定等。
PIL(Python Imaging Library):這是一個(gè)強(qiáng)大的圖像處理庫(kù),包含Image、ImageDraw、ImageFont和ImageFilter模塊,分別用于創(chuàng)建和操作圖像、繪制圖形、加載字體以及應(yīng)用圖像濾鏡。

2. 定義輔助函數(shù)

為了使代碼更清晰、易讀,我們定義兩個(gè)輔助函數(shù):rndChar() 和 rndColor(),分別用于生成隨機(jī)字符和隨機(jī)顏色。

2.1 rndChar():生成隨機(jī)字母或數(shù)字

def rndChar():
    """
    生成隨機(jī)字母或數(shù)字
    :return:
    """
    random_char = random.choice(
        [chr(random.randint(65, 90)),  # 字母(大寫)
         str(random.randint(0, 9))]  # 數(shù)字
    )
    return random_char

此函數(shù)通過(guò)random.choice()從一個(gè)列表中隨機(jī)選取一個(gè)元素。列表中包含兩種類型的元素:大寫字母(ASCII碼范圍65到90)和數(shù)字(0到9)。每次調(diào)用rndChar()會(huì)返回一個(gè)隨機(jī)的字母或數(shù)字。

2.2 rndColor():生成隨機(jī)顏色

def rndColor():
    """
    生成隨機(jī)顏色
    :return:
    """
    return (random.randint(0, 255), random.randint(10, 255), random.randint(64, 255))

該函數(shù)返回一個(gè)包含三個(gè)整數(shù)的元組,分別代表紅、綠、藍(lán)(RGB)通道的顏色值。每個(gè)值都在指定范圍內(nèi)隨機(jī)選取,確保生成的色彩豐富且具有良好的可讀性。

3. 主函數(shù)check_code()

接下來(lái),我們編寫主函數(shù)check_code(),它接受一系列參數(shù)并負(fù)責(zé)整個(gè)驗(yàn)證碼的生成過(guò)程,包括創(chuàng)建空白圖像、繪制字符、添加干擾元素,以及最后的圖像濾鏡處理。

3.1 初始化與設(shè)置

def check_code(width=120, height=30, char_length=5, font_file='Monaco.ttf', font_size=28):
    code = []  # 存儲(chǔ)生成的驗(yàn)證碼字符序列
    # 創(chuàng)建一張圖片
    img = Image.new(mode='RGB', size=(width, height), color=(255, 255, 255))
    draw = ImageDraw.Draw(img, mode='RGB')

函數(shù)接受以下參數(shù):

width和height:驗(yàn)證碼圖片的寬度和高度,默認(rèn)為120像素寬、30像素高。
char_length:驗(yàn)證碼字符數(shù)量,默認(rèn)為5個(gè)。
font_file:字體文件路徑,默認(rèn)使用’Monaco.ttf’。
font_size:驗(yàn)證碼字符的字體大小,默認(rèn)為28像素。
首先創(chuàng)建一個(gè)空白的RGB模式圖像,并設(shè)置其背景色為白色。接著,創(chuàng)建一個(gè)ImageDraw對(duì)象draw,用于在圖像上繪制文本和圖形。

3.2 繪制驗(yàn)證碼字符

def rndChar():
    ...
def rndColor():
    ...
font = ImageFont.truetype(font_file, font_size)
for i in range(char_length):
    char = rndChar()
    code.append(char)
    h = random.randint(0, 4)  # 隨機(jī)字符基線偏移
    draw.text([i * width / char_length, h], char, font=font, fill=rndColor())

使用ImageFont.truetype()加載指定的字體文件,并設(shè)置字體大小。然后,循環(huán)char_length次,每次生成一個(gè)隨機(jī)字符、將其添加到code列表中,并在圖像上繪制。字符的位置根據(jù)索引i均勻分布,基線高度有一個(gè)隨機(jī)的小幅偏移(0到4像素),以增加視覺復(fù)雜度。字符顏色由rndColor()函數(shù)隨機(jī)生成。

3.3 添加干擾元素

為了降低機(jī)器識(shí)別的成功率,我們?cè)隍?yàn)證碼圖片中加入多種干擾元素:

3.3.1 干擾點(diǎn)

for i in range(40):
    draw.point([random.randint(0, width), random.randint(0, height)], fill=rndColor())

隨機(jī)生成40個(gè)點(diǎn),其坐標(biāo)在圖像范圍內(nèi)均勻分布,顏色同樣由rndColor()函數(shù)提供。

3.3.2 干擾圓圈

for i in range(40):
    draw.point([random.randint(0, width), random.randint(0, height)], fill=rndColor())
    x = random.randint(0, width)
    y = random.randint(0, height)
    draw.arc((x, y, x + 4, y + 4), 0, 90, fill=rndColor())

除了點(diǎn)狀干擾,還生成40個(gè)直徑為4像素的弧形(近似小圓圈),位置和顏色均為隨機(jī)。

3.3.3 干擾線

for i in range(5):
    x1 = random.randint(0, width)
    y1 = random.randint(0, height)
    x2 = random.randint(0, width)
    y2 = random.randint(0, height)
    draw.line((x1, y1, x2, y2), fill=rndColor())

最后,繪制5條隨機(jī)起點(diǎn)、終點(diǎn)和顏色的直線作為干擾線。

3.4 應(yīng)用圖像濾鏡

img = img.filter(ImageFilter.EDGE_ENHANCE_MORE)

為了進(jìn)一步提升驗(yàn)證碼的抗噪聲能力,對(duì)生成的圖像應(yīng)用ImageFilter.EDGE_ENHANCE_MORE濾鏡,增強(qiáng)圖像邊緣對(duì)比度。

3.5 返回結(jié)果

return img, ''.join(code)

函數(shù)返回生成的驗(yàn)證碼圖片以及對(duì)應(yīng)的字符序列。

總結(jié)

通過(guò)上述步驟,我們成功創(chuàng)建了一個(gè)Python隨機(jī)驗(yàn)證碼生成器。只需調(diào)用check_code()函數(shù),即可得到一張包含隨機(jī)字符、多種干擾元素及邊緣增強(qiáng)效果的驗(yàn)證碼圖片,同時(shí)返回對(duì)應(yīng)的驗(yàn)證碼字符串。這樣的驗(yàn)證碼設(shè)計(jì)有助于防止自動(dòng)化腳本的破解,提升系統(tǒng)的安全性。您可以根據(jù)實(shí)際需求調(diào)整函數(shù)參數(shù),定制符合項(xiàng)目要求的驗(yàn)證碼樣式。現(xiàn)在,您可以將此代碼集成到您的應(yīng)用程序中,為用戶登錄、注冊(cè)或其他敏感操作提供可靠的驗(yàn)證碼保護(hù)機(jī)制。

到此這篇關(guān)于Python創(chuàng)建一個(gè)功能齊全的隨機(jī)驗(yàn)證碼生成器的文章就介紹到這了,更多相關(guān)Python生成自定義隨機(jī)驗(yàn)證碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python list 合并連接字符串的方法

    python list 合并連接字符串的方法

    python 列表合并字符串,我們一般會(huì)用到字符串的join方法來(lái)操作。下面通過(guò)代碼的形式,詳細(xì)的說(shuō)下list怎么拼成字符串?
    2013-03-03
  • PyQt5中QButtonGroup的用法解析與案例分享

    PyQt5中QButtonGroup的用法解析與案例分享

    在PyQt5中,QButtonGroup是一個(gè)非常有用的類,它提供了一個(gè)抽象的按鈕容器,允許開發(fā)者將多個(gè)按鈕劃分為一個(gè)組,本教程將詳細(xì)介紹QButtonGroup的創(chuàng)建、使用、信號(hào)槽連接以及在實(shí)際項(xiàng)目中的應(yīng)用案例,需要的朋友可以參考下
    2024-08-08
  • 詳解如何使用Pytorch進(jìn)行多卡訓(xùn)練

    詳解如何使用Pytorch進(jìn)行多卡訓(xùn)練

    當(dāng)一塊GPU不夠用時(shí),我們就需要使用多卡進(jìn)行并行訓(xùn)練。其中多卡并行可分為數(shù)據(jù)并行和模型并行。本文就來(lái)教教大家如何使用Pytorch進(jìn)行多卡訓(xùn)練?,需要的可參考一下
    2022-10-10
  • Python循環(huán)結(jié)構(gòu)的應(yīng)用場(chǎng)景詳解

    Python循環(huán)結(jié)構(gòu)的應(yīng)用場(chǎng)景詳解

    這篇文章主要介紹了Python循環(huán)結(jié)構(gòu)的應(yīng)用場(chǎng)景詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • python神經(jīng)網(wǎng)絡(luò)ResNet50模型的復(fù)現(xiàn)詳解

    python神經(jīng)網(wǎng)絡(luò)ResNet50模型的復(fù)現(xiàn)詳解

    這篇文章主要為大家介紹了python神經(jīng)網(wǎng)絡(luò)ResNet50模型的復(fù)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • 詳解Python的三種可變參數(shù)

    詳解Python的三種可變參數(shù)

    這篇文章主要介紹了Python的三種可變參數(shù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • python小項(xiàng)目之五子棋游戲

    python小項(xiàng)目之五子棋游戲

    這篇文章主要為大家詳細(xì)介紹了python小項(xiàng)目之五子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • Python接口自動(dòng)化測(cè)試框架運(yùn)行原理及流程

    Python接口自動(dòng)化測(cè)試框架運(yùn)行原理及流程

    這篇文章主要介紹了Python接口自動(dòng)化測(cè)試框架運(yùn)行原理及流程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • pycharm代碼刪除恢復(fù)的方法

    pycharm代碼刪除恢復(fù)的方法

    pycharm是一個(gè)很強(qiáng)大的編輯工具,很多朋友在使用過(guò)程中容易產(chǎn)生誤操作,那么一不小心刪除了,怎么恢復(fù)呢,今天就給大家介紹pycharm代碼刪除恢復(fù)教程,需要的朋友參考下吧
    2021-06-06
  • django xadmin 管理器常用顯示設(shè)置方式

    django xadmin 管理器常用顯示設(shè)置方式

    這篇文章主要介紹了django xadmin 管理器常用顯示設(shè)置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-03-03

最新評(píng)論

舞阳县| 五华县| 岫岩| 开阳县| 苏尼特左旗| 乐至县| 静安区| 张家界市| 张北县| 乌海市| 安义县| 罗源县| 南昌市| 黄浦区| 丰镇市| 灵台县| 宽城| 普洱| 柳江县| 赤壁市| 平和县| 南宫市| 湟源县| 历史| 新田县| 建平县| 米脂县| 黎平县| 兰考县| 时尚| 醴陵市| 如东县| 得荣县| 嫩江县| 德安县| 林周县| 油尖旺区| 察隅县| 交口县| 沂水县| 绵阳市|