亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python創(chuàng)建一個功能齊全的隨機驗證碼生成器

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

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

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

首先,我們需要引入以下幾個Python庫來支持驗證碼生成過程中的圖像處理和隨機數(shù)生成:

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

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

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

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

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

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

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

2.2 rndColor():生成隨機顏色

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

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

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

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

3.1 初始化與設(shè)置

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

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

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

3.2 繪制驗證碼字符

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)  # 隨機字符基線偏移
    draw.text([i * width / char_length, h], char, font=font, fill=rndColor())

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

3.3 添加干擾元素

為了降低機器識別的成功率,我們在驗證碼圖片中加入多種干擾元素:

3.3.1 干擾點

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

隨機生成40個點,其坐標在圖像范圍內(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())

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

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條隨機起點、終點和顏色的直線作為干擾線。

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

img = img.filter(ImageFilter.EDGE_ENHANCE_MORE)

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

3.5 返回結(jié)果

return img, ''.join(code)

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

總結(jié)

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

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

相關(guān)文章

  • 使用Docker制作Python環(huán)境連接Oracle鏡像

    使用Docker制作Python環(huán)境連接Oracle鏡像

    這篇文章主要為大家介紹了使用Docker制作Python環(huán)境連接Oracle鏡像示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • Python中的變量和數(shù)據(jù)類型詳情

    Python中的變量和數(shù)據(jù)類型詳情

    這篇文章主要介紹了Python中的變量和數(shù)據(jù)類型詳情,變量不需要聲明即可使用,向變量賦值即定義變量,python中的數(shù)據(jù)類型包括數(shù)值類型、列表、元組等內(nèi)容,下面文章的詳細介紹,需要的小伙伴可以參考一下
    2022-03-03
  • Python利用Pytorch實現(xiàn)繪制ROC與PR曲線圖

    Python利用Pytorch實現(xiàn)繪制ROC與PR曲線圖

    這篇文章主要和大家分享一下Python利用Pytorch實現(xiàn)繪制ROC與PR曲線圖的相關(guān)代碼,文中的示例代碼講解詳細,具有一定的借鑒價值,需要的可以參考一下
    2022-12-12
  • Python實現(xiàn)GIF動圖加載和降幀的方法詳解

    Python實現(xiàn)GIF動圖加載和降幀的方法詳解

    這篇文章主要為大家詳細介紹了如何利用Python和Pygame實現(xiàn)GIF動圖加載和降幀的效果,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2023-02-02
  • Python通過paramiko庫實現(xiàn)遠程執(zhí)行l(wèi)inux命令的方法

    Python通過paramiko庫實現(xiàn)遠程執(zhí)行l(wèi)inux命令的方法

    這篇文章主要介紹了Python通過paramiko庫實現(xiàn)遠程執(zhí)行l(wèi)inux命令,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • opencv實現(xiàn)圖像旋轉(zhuǎn)效果

    opencv實現(xiàn)圖像旋轉(zhuǎn)效果

    這篇文章主要為大家詳細介紹了opencv實現(xiàn)圖像旋轉(zhuǎn)效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • 如何使用conda和pip批量安裝Python包

    如何使用conda和pip批量安裝Python包

    這篇文章主要介紹了如何使用conda和pip批量安裝Python包問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • python如何獲取當前系統(tǒng)的日期

    python如何獲取當前系統(tǒng)的日期

    這篇文章主要介紹了python如何獲取當前系統(tǒng)的日期,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Python微信自動化庫使用詳解

    Python微信自動化庫使用詳解

    Python微信自動化是指使用Python編程語言來實現(xiàn)對微信的自動化操作,在Python中,有幾個庫可以用于微信自動化操作,包括itchat、wxpy、wechatpy和wxauto,以下是對這些庫的詳細介紹,需要的朋友可以參考下
    2025-03-03
  • python中編寫config文件并及時更新的方法

    python中編寫config文件并及時更新的方法

    在pytorch或者其他深度學(xué)習(xí)框架中,有許多超參數(shù)需要調(diào)整,包括learning_rate,training_data_path等,因此編寫一個config文件統(tǒng)一存放這些參數(shù),方便調(diào)用/查看/修改還是很有必要,這篇文章主要介紹了python中一種編寫config文件并及時更新的方法,需要的朋友可以參考下
    2023-02-02

最新評論