recherche
Maisondéveloppement back-endTutoriel PythonComment implémenter la fonction de vérification du code de vérification comportementale en Python

Aperçu du type de vérification

Puzzle coulissant

Vérification comportementale innovante, complétez facilement le puzzle d'un seul coup, excellente expérience, réussissez la vérification en quelques secondes. Simple et efficace, il protège des risques machines tout en garantissant une expérience utilisateur ultime. Convient aux scénarios qui recherchent l’expérience utilisateur.

# 生成背景图
  basemap1 = Image.open(bg).convert("RGBA")  # 背景图
  if basemap1.size != size:  # 需要裁切或拉伸
      basemap1 = Graphics.crop(basemap1, size[0], size[1])
  puzzle1 = Image.open(url_absolute(img)).convert("RGBA")  # 方块图,蒙板
  # 旋转角度
  if rotate == 2:
      angle = randint(0, 360)
  elif rotate == 1:
      angle = choice([0, 90, 180, 270])
  else:
      angle = 0
  # angle = 45
  if angle: puzzle1 = puzzle1.rotate(angle, resample=Image.Resampling.BILINEAR)

  puzzle1.putalpha(ImageEnhance.Brightness(puzzle1.split()[3]).enhance(alpha))  # 设置透明度,0-1之间
  # 产生随机位置
  img_size = puzzle1.size  # 滑动图片尺寸
  spacing = 0  # 滑动图片在底图位置四周间距,暂时使用0,小图片中的图案本身有20px边距
  # 随机位置
  x = randint(img_size[0] + spacing, size[0] - img_size[0] - spacing)
  y = randint(spacing, size[1] - img_size[1] - spacing)
  basemap1.paste(puzzle1, (x, y), puzzle1)  # 拷贝

  # 方块滑动图
  # basemap2 = Image.open(url_absolute(bg)).convert("RGBA")
  basemap2 = Image.open(bg).convert("RGBA")
  if basemap2.size != size:  # 需要裁切或拉伸
      basemap2 = Graphics.crop(basemap2, size[0], size[1])
  puzzle2 = Image.open(url_absolute(img)).convert("RGBA")
  if angle: puzzle2 = puzzle2.rotate(angle, resample=Image.Resampling.BILINEAR)  # 旋转

  basemap2 = basemap2.crop((x, y, x + img_size[0], y + img_size[1]))  # 裁切
  puzzle2.paste(basemap2, (0, 0), puzzle2)
  # 替换成长条形滑动块
  strip = Image.new('RGBA', (img_size[0], size[1]), (255, 255, 255, 0))
  strip.paste(puzzle2, (0, y), puzzle2)  # 拷贝

Sélection de texte

Cliquez séquentiellement sur le texte dans l'image, une nouvelle vérification comportementale, une sécurité extrêmement élevée, assurant la sécurité de la vérification. Tout en améliorant la difficulté de la reconnaissance automatique, il garantit la lisibilité par les utilisateurs réels. Convient aux scénarios commerciaux avec des exigences de sécurité élevées.

def random_character(self, length=None, type=[0, 1, 2, 3], repeat=False):
  """
  生成随机字符
  :param length: 生成的字符长度,几个字符
  :param type: [0] 数字,[1] 大写字母,[2]小写字母,[3] 特殊字符
  :param repeat: 是否允许重复字符
  :return [("A", 1, "大写字母"), ("8", 0, "数字"), ("a", 2, "小写字母"), ("", 3, "高跟鞋") ...]
  """
  if length is None: length = self.str_count
  # length = 10
  # type = [0]
  string = "".join(dict([(key, {
      0: "2345678923456789",
      1: "ABCDEFGHJKLMNQRTY",
      2: "abcdefghijkmnqrty",
      3: "",
  }[key]) for key in type]).values())

  r = []
  for i in range(length):
      if repeat:  # 允许重复
          s = choice(string)
          t = Inference.char_type(s)
          r.append((s, t[0], t[1]))
      else:
          anti = 0  # 防止死循环,尝试一定次数后允许字符重复
          while True:
              anti += 1
              s = choice(string)
              t = Inference.char_type(s)
              st = "".join([it[0] for it in r])
              if s not in st or anti > 30:
                  r.append((s, t[0], t[1]))
                  break
  # 替换 n 个字母为图形字符
  if 3 in type:
      index = sample([i for i in range(length)], randint(0, length))  # 随机一组索引值:[0, 3, 1]
      icon_char = sample(self.icon_str, len(index))  # 随机取出 n 组特殊字符
      x = 0
      for i in index:
          # r = Inference.char_replace(r, i, icon_char[x][1])
          r[i] = (icon_char[x][1], 3, icon_char[x][2])
          x += 1
  return r

Ordre des mots cliquez

Semantique chinoise, cliquez sur le texte dans l'image dans l'ordre, et la capacité de compréhension sémantique est combinée avec la trajectoire comportementale. Convient aux scénarios commerciaux avec des exigences de sécurité élevées.

Ce qui suit est un exemple de production de points d'interférence et de lignes d'interférence :

# 噪线
  for i in range(line_count):
      x1 = randint(0, size[0])
      x2 = randint(0, size[0])
      y1 = randint(0, size[1])
      y2 = randint(0, size[1])
      draw.line((x1, y1, x2, y2), fill=Word.get_random_color())

  # 噪点
  for i in range(point_count):
      draw.point([randint(0, size[0]), randint(0, size[1])], fill=Word.get_random_color())
      x = randint(0, size[0])
      y = randint(0, size[1])
      draw.arc((x, y, x + 4, y + 4), 0, 90, fill=Word.get_random_color())

Reconnaissance de polices

Cliquez sur le texte qui est dans un autre la police des autres caractères. La vérification de sécurité ne prend qu'un seul clic. Convient aux scénarios commerciaux avec des exigences de sécurité extrêmement élevées.

# 字体识别
if type in (10, 11, 12):  # 789生成成语/固定字符
    str_count = 1
    str_inter = numeric(str_inter, 2, 20)  # 干扰字符不能少于2
    v_font = sample(ttf, 2)  # 随机选出两种字体

string = []
for i in range(str_count + str_inter):

    if type in (10, 11, 12):  # 字体识别,只使用两种字体
        font_file = v_font[0] if i == 0 else v_font[1]
    else:  # 随机字体
        font_file = choice(ttf)

    font = ImageFont.truetype(url_absolute(font_file), size=font_size)

    # 成语/使用固定字符,前n个字符使用成语字符
    random_char = idiom[i:i+1] if idiom else ""

    # 随机字符串及补充固定字符时追加干扰字符
    if random_char == "":
        head = randint(0xb0, 0xf7)
        body = randint(0xa1, 0xfe)
        random_char = bytes.fromhex(f'{head:x} {body:x}').decode("gb18030")

    # print(random_char, font_file)

    # 随机位置
    anti = 0  # 防止字体设置过大或者图片设置过小,导致死循环,尝试一定次数后允许字符重叠
    while True:  # 防止文字重叠
        anti += 1
        x = randint(0, size[0] - font_size)
        y = randint(0, size[1] - font_size)
        find = True
        for s in string:
            if abs(x - s[1]) < font_size and abs(y - s[2]) < font_size:
                find = False
                break
        if find or not string or anti > 20: break

    # 创建文字图片,可旋转
    str_bg = Image.new("RGBA", (font_size, font_size), (255, 255, 255, 0))  # 文字用空白图层
    str_draw = ImageDraw.Draw(str_bg)
    str_draw.text((0, 0), random_char, Word.get_random_color(), font=font)  # 添加文字
    angle = randint(-75, 75) if rotate else 0  # 是否随机角度
    str_bg = str_bg.rotate(angle, resample=Image.Resampling.BILINEAR, expand=0)  # 随机旋转

    basemap.paste(str_bg, (x, y), str_bg)  # 图片与文字合并

    # 保存随机字符及位置
    string.append([random_char, x, y, -angle])  # 字符、x、y、角度(正负转换,转用CSS顺时针旋转形式)

spacereasoning

Selon les invites, cliquez sur l'élément correspondant. Capacité de résolution logique de problèmes combinée à la capacité de reconnaître des symboles graphiques et d’autres éléments. Convient aux scénarios commerciaux avec des exigences de sécurité extrêmement élevées.

Voici quelques exemples de méthodes de vérification :

def send_color2differ(self):
        """ 请点击一个颜色不一样的字符 """
        color = self.color_name(2)  # 获取 2 组带中文名称的颜色 [(&#39;蓝色&#39;, &#39;#0000FF&#39;), ]
        data = []
        for i in range(self.str_count):
            # data/在图片上生成的数据
            data.append({
                "str": self.string[i][0],  # 字符内容
                "X": self.coord[i][0],  # x 位置
                "Y": self.coord[i][1],  # y 位置
                "color": color[0][1] if i == 0 else color[1][1],
                "angle": self.angle[i],
                "icon": True if self.string[i][1] == 3 else False,  # 是否为图形字符
            })
        # hint/操作说明文字
        hint = f&#39;请点击一个 <i>颜色不一样</i> 的 <i>{self.string[0][2]}</i>&#39;
        str = [(data[0]["str"], data[0]["X"], data[0]["Y"], data[0]["angle"]), ]
        return {"data": data, "str": str, "hint": hint}

def send_color2capital(self):
        """ 请点击蓝色字母对应的大写 """
        direc = choice([1, 2])  # 随机一种方式,大写 to 小写/小写 to 大写
        color = self.color_name()  # 获取 n 组带中文名称的颜色 [(&#39;蓝色&#39;, &#39;#0000FF&#39;), ]
        self.string = self.random_character(type=[direc])
        data = []
        for i in range(self.str_count):
            # data/在图片上生成的数据
            data.append({
                "str": self.string[i][0],  # 字符内容
                "X": self.coord[i][0],  # x 位置
                "Y": self.coord[i][1],  # y 位置
                "color": color[i][1],
                "angle": self.angle[i],
                "icon": True if self.string[i][1] == 3 else False,  # 是否为图形字符
            })

        data[0]["str"] = data[1]["str"].swapcase()
        # hint/操作说明文字
        hint = f&#39;请点击 <i>{color[0][0]}字母</i> 对应的 <i>{"大写" if direc == 1 else "小写"}</i>&#39;
        str = [(data[1]["str"], data[1]["X"], data[1]["Y"], data[1]["angle"]), ]
        return {"data": data, "str": str, "hint": hint}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer
Python: jeux, GUIS, et plusPython: jeux, GUIS, et plusApr 13, 2025 am 12:14 AM

Python excelle dans les jeux et le développement de l'interface graphique. 1) Le développement de jeux utilise Pygame, fournissant des fonctions de dessin, audio et d'autres fonctions, qui conviennent à la création de jeux 2D. 2) Le développement de l'interface graphique peut choisir Tkinter ou Pyqt. Tkinter est simple et facile à utiliser, PYQT a des fonctions riches et convient au développement professionnel.

Python vs C: applications et cas d'utilisation comparésPython vs C: applications et cas d'utilisation comparésApr 12, 2025 am 12:01 AM

Python convient à la science des données, au développement Web et aux tâches d'automatisation, tandis que C convient à la programmation système, au développement de jeux et aux systèmes intégrés. Python est connu pour sa simplicité et son écosystème puissant, tandis que C est connu pour ses capacités de contrôle élevées et sous-jacentes.

Le plan Python de 2 heures: une approche réalisteLe plan Python de 2 heures: une approche réalisteApr 11, 2025 am 12:04 AM

Vous pouvez apprendre les concepts de programmation de base et les compétences de Python dans les 2 heures. 1. Apprenez les variables et les types de données, 2. Flux de contrôle maître (instructions et boucles conditionnelles), 3. Comprenez la définition et l'utilisation des fonctions, 4. Démarrez rapidement avec la programmation Python via des exemples simples et des extraits de code.

Python: Explorer ses applications principalesPython: Explorer ses applications principalesApr 10, 2025 am 09:41 AM

Python est largement utilisé dans les domaines du développement Web, de la science des données, de l'apprentissage automatique, de l'automatisation et des scripts. 1) Dans le développement Web, les cadres Django et Flask simplifient le processus de développement. 2) Dans les domaines de la science des données et de l'apprentissage automatique, les bibliothèques Numpy, Pandas, Scikit-Learn et Tensorflow fournissent un fort soutien. 3) En termes d'automatisation et de script, Python convient aux tâches telles que les tests automatisés et la gestion du système.

Combien de python pouvez-vous apprendre en 2 heures?Combien de python pouvez-vous apprendre en 2 heures?Apr 09, 2025 pm 04:33 PM

Vous pouvez apprendre les bases de Python dans les deux heures. 1. Apprenez les variables et les types de données, 2. Structures de contrôle maître telles que si les instructions et les boucles, 3. Comprenez la définition et l'utilisation des fonctions. Ceux-ci vous aideront à commencer à écrire des programmes Python simples.

Comment enseigner les bases de la programmation novice en informatique dans le projet et les méthodes axées sur les problèmes dans les 10 heures?Comment enseigner les bases de la programmation novice en informatique dans le projet et les méthodes axées sur les problèmes dans les 10 heures?Apr 02, 2025 am 07:18 AM

Comment enseigner les bases de la programmation novice en informatique dans les 10 heures? Si vous n'avez que 10 heures pour enseigner à l'informatique novice des connaissances en programmation, que choisissez-vous d'enseigner ...

Comment éviter d'être détecté par le navigateur lors de l'utilisation de Fiddler partout pour la lecture de l'homme au milieu?Comment éviter d'être détecté par le navigateur lors de l'utilisation de Fiddler partout pour la lecture de l'homme au milieu?Apr 02, 2025 am 07:15 AM

Comment éviter d'être détecté lors de l'utilisation de FiddlereVerywhere pour les lectures d'homme dans le milieu lorsque vous utilisez FiddlereVerywhere ...

Que dois-je faire si le module '__builtin__' n'est pas trouvé lors du chargement du fichier de cornichon dans Python 3.6?Que dois-je faire si le module '__builtin__' n'est pas trouvé lors du chargement du fichier de cornichon dans Python 3.6?Apr 02, 2025 am 07:12 AM

Chargement des fichiers de cornichons dans Python 3.6 Rapport de l'environnement Erreur: modulenotFoundError: NomoduLenamed ...

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

Navigateur d'examen sécurisé

Navigateur d'examen sécurisé

Safe Exam Browser est un environnement de navigation sécurisé permettant de passer des examens en ligne en toute sécurité. Ce logiciel transforme n'importe quel ordinateur en poste de travail sécurisé. Il contrôle l'accès à n'importe quel utilitaire et empêche les étudiants d'utiliser des ressources non autorisées.

Version crackée d'EditPlus en chinois

Version crackée d'EditPlus en chinois

Petite taille, coloration syntaxique, ne prend pas en charge la fonction d'invite de code

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Version Mac de WebStorm

Version Mac de WebStorm

Outils de développement JavaScript utiles