suchen
  • Anmelden
  • Melden Sie sich an
Passwort-Reset erfolgreich

Verfolgen Sie die Projekte, die Sie interessieren, und erfahren Sie die neuesten Nachrichten über sie

Heim Backend-Entwicklung Python-Tutorial Beispiel für einen Python-Verifizierungscode

Beispiel für einen Python-Verifizierungscode

Nov 09, 2016 pm 05:31 PM

#!/usr/bin/env python
#coding=utf-8
import random
import Image, ImageDraw, ImageFont, ImageFilter
  
_letter_cases = "abcdefghjkmnpqrstuvwxy" # 小写字母,去除可能干扰的i,l,o,z
_upper_cases = _letter_cases.upper() # 大写字母
_numbers = ''.join(map(str, range(3, 10))) # 数字
init_chars = ''.join((_letter_cases, _upper_cases, _numbers))
fontType="/usr/share/fonts/truetype/freefont/FreeSans.ttf"
  
def create_validate_code(size=(120, 30),
                             chars=init_chars,
                             img_type="GIF",
                             mode="RGB",
                             bg_color=(255, 255, 255),
                             fg_color=(0, 0, 255),
                             font_size=18,
                             font_type=fontType,
                             length=4,
                             draw_lines=True,
                             n_line=(1, 2),
                             draw_points=True,
                             point_chance = 2):
  '''
  @todo: 生成验证码图片
  @param size: 图片的大小,格式(宽,高),默认为(120, 30)
  @param chars: 允许的字符集合,格式字符串
  @param img_type: 图片保存的格式,默认为GIF,可选的为GIF,JPEG,TIFF,PNG
  @param mode: 图片模式,默认为RGB
  @param bg_color: 背景颜色,默认为白色
  @param fg_color: 前景色,验证码字符颜色,默认为蓝色#0000FF
  @param font_size: 验证码字体大小
  @param font_type: 验证码字体,默认为 ae_AlArabiya.ttf
  @param length: 验证码字符个数
  @param draw_lines: 是否划干扰线
  @param n_lines: 干扰线的条数范围,格式元组,默认为(1, 2),只有draw_lines为True时有效
  @param draw_points: 是否画干扰点
  @param point_chance: 干扰点出现的概率,大小范围[0, 100]
  @return: [0]: PIL Image实例
  @return: [1]: 验证码图片中的字符串
  '''
  
  width, height = size # 宽, 高
  img = Image.new(mode, size, bg_color) # 创建图形
  draw = ImageDraw.Draw(img) # 创建画笔
  if draw_lines:
    create_lines(draw,n_line,width,height)
  if draw_points:
    create_points(draw,point_chance,width,height)
  strs = create_strs(draw,chars,length,font_type, font_size,width,height,fg_color)
  
  # 图形扭曲参数
  params = [1 - float(random.randint(1, 2)) / 100,
            0,
            0,
            0,
            1 - float(random.randint(1, 10)) / 100,
            float(random.randint(1, 2)) / 500,
            0.001,
            float(random.randint(1, 2)) / 500
            ]
  img = img.transform(size, Image.PERSPECTIVE, params) # 创建扭曲
  
  img = img.filter(ImageFilter.EDGE_ENHANCE_MORE) # 滤镜,边界加强(阈值更大)
  
  return img, strs
  
  
def create_lines(draw,n_line,width,height):
  '''绘制干扰线'''
  line_num = random.randint(n_line[0],n_line[1]) # 干扰线条数
  for i in range(line_num):
    # 起始点
    begin = (random.randint(0, width), random.randint(0, height))
    #结束点
    end = (random.randint(0, width), random.randint(0, height))
    draw.line([begin, end], fill=(0, 0, 0))
  
def create_points(draw,point_chance,width,height):
  '''绘制干扰点'''
  chance = min(100, max(0, int(point_chance))) # 大小限制在[0, 100]
   
  for w in xrange(width):
    for h in xrange(height):
      tmp = random.randint(0, 100)
      if tmp > 100 - chance:
        draw.point((w, h), fill=(0, 0, 0))
  
def create_strs(draw,chars,length,font_type, font_size,width,height,fg_color):
  '''绘制验证码字符'''
  '''生成给定长度的字符串,返回列表格式'''
  c_chars = random.sample(chars, length)
  strs = ' %s ' % ' '.join(c_chars) # 每个字符前后以空格隔开
   
  font = ImageFont.truetype(font_type, font_size)
  font_width, font_height = font.getsize(strs)
  
  draw.text(((width - font_width) / 3, (height - font_height) / 3),strs, font=font, fill=fg_color)
   
  return ''.join(c_chars)
  
  
if __name__ == "__main__":
    code_img = create_validate_code()
    code_img[0].save("validate.gif", "GIF")
    print code_img[1]

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

Stock Market GPT

Stock Market GPT

KI-gestützte Anlageforschung für intelligentere Entscheidungen

Beliebtes Werkzeug

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Github: Entdecken, Teilen und Beitrag zum Code Github: Entdecken, Teilen und Beitrag zum Code May 08, 2025 am 12:26 AM

GitHub ist die bevorzugte Plattform für Entwickler, um Code zu entdecken, zu teilen und beizutragen. 1) Suchen Sie spezifische Codebasen über Suchfunktionen wie Python -Projekte. 2) Erstellen Sie ein Repository und schieben Sie Code, um sie mit Entwicklern auf der ganzen Welt zu teilen. 3) Nehmen Sie an Open Source -Projekten teil und tragen Sie Code über Gabel und Pullrequest bei.

Code-Sharing für Horizon 2 West Cradle of Echoes Code-Sharing für Horizon 2 West Cradle of Echoes Mar 29, 2024 pm 05:06 PM

Wenn Spieler Horizon 2 West spielen, müssen sie die Konsole überprüfen und in der zehnten Hauptmission „Cradle of Echoes“ einen Code eingeben. Viele Spieler kennen den Code nicht, und der Konsolencode lautet 237. Code-Sharing-Antwort für Horizon 2 West: Cradle of Echoes: 237. 1. Die Konsole verwendet 236, um den Spieler zu verwirren. Was wirklich benötigt wird, ist die versteckte Nummer 237. 2. Der Code kann im [Notsignal] gefunden werden ]-Datenpunkt, in Val wird dies auch bei der Interaktion mit der Konsole angezeigt. 3. Eine falsche Eingabe führt zu einem leeren Container. 4. Tippen Sie auf „board-notebook-data point-text data point-task-call“, um Hilfe zu erhalten. Schließlich wird 237 unter den Koordinaten angezeigt.

Erhabene Textausschnitte: Erstellen Sie wiederverwendbare Codeblöcke für die Effizienz Erhabene Textausschnitte: Erstellen Sie wiederverwendbare Codeblöcke für die Effizienz Apr 02, 2025 pm 02:08 PM

SublimeteXTSNippets ist eine vordefinierte Codevorlage, die den Code schnell durch Abkürzungschlüsseln oder Triggerwörter einfügt, um die Programmierungseffizienz zu verbessern. 1. Erstellen von Snippets: Basierend auf dem XML-Format, gespeichert in der Sublime-Snippet-Datei. 2. Verwenden Sie Beispiel: Geben Sie ein Triggerwort wie "def" oder "html5" ein und drücken Sie die Registerkarten -Taste, um die Codestruktur automatisch zu generieren. 3. Vermeiden Sie Fehler: Stellen Sie sicher, dass die Triggerwörter eindeutig sind, den richtigen Bereich festlegen und das XML -Format korrekt halten.

Wie verwende ich die Snippets -Funktion von Sublime Text, um wiederverwendbare Codevorlagen zu erstellen? Wie verwende ich die Snippets -Funktion von Sublime Text, um wiederverwendbare Codevorlagen zu erstellen? Jul 08, 2025 am 12:33 AM

Die Code -Snippet -Funktion von Sublimetext kann die Codierungseffizienz durch voreingestellte Vorlagen verbessern. Die spezifischen Schritte sind: 1. Erstellen Sie ein neues Fragment über Tools> Entwickler> NewsNippet ..., ersetzen Sie den Platzhalter in der Vorlage und speichern Sie es im Standardordner. 2. Verwenden Sie die Taste Trigger Word und Registerkarte im Code, um häufig gemeinsame Strukturen einzufügen, wie z. 3.. Sie können dem Fragment Variablen und Platzhalter hinzufügen, z. B. das Festlegen $ {1: FunktionName}, $ {2: Argumente} und andere Tags, wenn JavaScript -Funktionsvorlagen definiert werden, um eine schnelle Anpassung zu erreichen. 4.. Benutzerdefinierte Fragmente werden standardmäßig in Packag gespeichert

Code-Sharing der Mall-Logistikschnittstelle: PHP-Technologie realisiert die Funktion des schnellen Druckens von Frachtbriefen! Code-Sharing der Mall-Logistikschnittstelle: PHP-Technologie realisiert die Funktion des schnellen Druckens von Frachtbriefen! Sep 12, 2023 am 09:24 AM

Code-Sharing der Mall-Logistikschnittstelle: PHP-Technologie realisiert die Funktion des schnellen Druckens von Frachtbriefen! Mit der rasanten Entwicklung des E-Commerce ist die Mall-Logistik zu einem unverzichtbaren Bestandteil der E-Commerce-Plattform geworden. Für Händler kann ein effizientes Logistiksystem das Einkaufserlebnis der Benutzer verbessern, die Bindung der Benutzer erhöhen und so mehr Verkaufschancen eröffnen. Im Hinblick auf die Realisierung der Funktion des schnellen Druckens von Frachtbriefen kann die PHP-Technologie einen großen Vorteil bieten. Als Open-Source-Skriptsprache wird PHP häufig in der Website-Entwicklung und Anwendungsentwicklung eingesetzt. Es hat eine einfache Syntax und ist einfach

Wie verwende ich Code -Snippets in Sublime Text? Wie verwende ich Code -Snippets in Sublime Text? Jul 12, 2025 am 12:46 AM

Die Verwendung von Sublimetexts Code -Snippet -Funktion kann häufig verwendete Codes über schnelle Triggerwörter einfügen, wodurch die Codierungseffizienz erheblich verbessert wird. Führen Sie die folgenden Schritte aus, um ein benutzerdefiniertes Fragment zu erstellen: 1. Klicken Sie auf Tools> Entwickler> NewsNippet…; 2. Definieren Sie den Inhalt und auslösen Wörter in der Vorlage; 3. Speichern Sie es als. Wenn Sie beispielsweise DIVC eingegeben haben, kann das Drücken der Registerkarte Taste ein HTMLDIV -Tag mit Klassen- und Inhaltsgerätigern einfügen. Zusätzlich können Sie den aktuellen Dateityp anzeigen, indem Sie das Befehlsfenster (Strg Shift P) und "InsertSnippet" eingeben, indem Sie das Befehlsfeld (STRG Shift P) öffnen und "InsertsNippet" eingeben.

Wie verwende ich Code -Snippets in VS -Code? Wie verwende ich Code -Snippets in VS -Code? Jul 15, 2025 am 01:46 AM

Die Methode zum schnellen Aufruf integrierter Code-Snippet in VSCODE besteht darin, das Trigger-Wort einzugeben und die Registerkarten-Taste wie für oder für CLG zu drücken. Sie können "IniseNippet" über das Befehlsfeld eingeben, um die von der aktuellen Sprache unterstützten Fragmente anzuzeigen. Um benutzerdefinierte Code -Snippets hinzuzufügen, müssen Sie die Snippet -Einstellungen für Benutzercode öffnen und dann die Sprache auswählen und die JSON -Datei bearbeiten, um eine neue Vorlage hinzuzufügen. Sie können das GitHub-Konto verwenden, um die Einstellungen zu synchronisieren, um die gemeinsame Nutzung von Code-Snippets zu erreichen. Das Beherrschen dieser Techniken kann die Codierungseffizienz erheblich verbessern.

So verwenden Sie Code -Snippets in VS -Code So verwenden Sie Code -Snippets in VS -Code Aug 11, 2025 pm 08:17 PM

Verwenden Sie integrierte Code-Snippets: Geben Sie das Trigger-Wort in die entsprechende Sprachdatei ein (z. B. Eingabe für in JavaScript und drücken Sie die Registerkarte, um eine für die Schleife zu generieren, und geben Sie in HTML ein und drücken Sie die Registerkarte, um eine HTML5-Vorlage zu generieren) und identifizieren verfügbare Fragmente über das Puzzle-Symbol in IntelliSense. 2. Erstellen Sie ein benutzerdefiniertes Fragment: Wählen Sie "Benutzercode -Snippet konfigurieren" über das Befehlsfeld (Strg Shift P oder CMD Shift P) und erstellen Sie Fragmente globaler oder spezifischer Sprachen und definieren Sie den Namen, das Präfix, den Inhalt und die Beschreibung in der Open JSON -Datei. 3. Die Fragmentstruktur umfasst Präfix (Trigger -Wort), Körper (Einfügen des Code

In Verbindung stehende Artikel