Python中的行为验证码验证功能怎么实现

验证类型概述

滑动拼图

创新行为式验证,轻松一滑完成拼图,体验极佳,秒速通过验证。简洁高效,在保障用户极致体验的同时,抵御机器风险。适用于追求用户体验的场景。

# 生成背景图  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)  # 拷贝

登录后复制

文字点选

顺序点击图中文字,全新行为验证,安全性极高,保障验证安全。提高机器识别难度的同时,保证真实用户可读。适用于安全要求较高的业务场景。

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

登录后复制

语序点选

根据中文语义,按顺序依次点击图中文字,语义理解能力结合行为轨迹。适用于安全要求较高的业务场景。

下面举例说说的干扰点与干扰线的制作:

# 噪线  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())

登录后复制

字体识别

点击与其它字符不同字体的文字,用户仅需一次点击,即可进行安全验证。适用于安全要求超高的业务场景。

立即学习“Python免费学习笔记(深入)”;

# 字体识别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])  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顺时针旋转形式)

登录后复制

空间推理

根据提示,点击对应的元素。逻辑解题能力结合图形符号等元素识别能力。适用于安全要求超高的业务场景。

下面举例几种验证方式:

def send_color2differ(self):        """ 请点击一个颜色不一样的字符 """        color = self.color_name(2)  # 获取 2 组带中文名称的颜色 [('蓝色', '#0000FF'), ]        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'请点击一个 颜色不一样 的 {self.string[0][2]}'        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 组带中文名称的颜色 [('蓝色', '#0000FF'), ]        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'请点击 {color[0][0]}字母 对应的 {"大写" if direc == 1 else "小写"}'        str = [(data[1]["str"], data[1]["X"], data[1]["Y"], data[1]["angle"]), ]        return {"data": data, "str": str, "hint": hint}

登录后复制

以上就是Python中的行为验证码验证功能怎么实现的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2234296.html

(0)
上一篇 2025年2月26日 17:29:53
下一篇 2025年2月19日 04:46:43

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • Python机器学习类别特征的处理方法有哪些

    categorical features refer to characteristics with values that fall within a finite set of categories, such as occupatio…

    2025年2月26日
    200
  • Python的json标准库怎么用

    一、JSON基础概述 1、JSON是什么? JSON(全名:JavaScript Object Notation 对象表示法)是一种轻量级的文本数据交换格式,JSON的数据格式其实就是python里面的字典格式,里面可以包含方括号括起来的数…

    2025年2月26日 编程技术
    200
  • Python中的图像处理库有哪些?

    python已经成为了数据科学和人工智能领域的主流语言。因为python是一种易于学习的语言,它被普遍应用于各种领域,包括图像处理。 Python的图像处理库有很多。在本文中,我们将介绍一些主要的图像处理库以及如何使用它们。 OpenCV …

    编程技术 2025年2月26日
    200
  • Python中的持续集成是什么?

    python语言已经成为了现代软件开发中不可或缺的一部分,而其中持续集成(ci)则是高度集成及持续交付过程中的一部分,可以大大提升开发过程的效率和质量。ci的目的是通过将代码集成到一个公共的代码库,并持续运行自动化测试和静态分析工具,以最大…

    编程技术 2025年2月26日
    200
  • python架构PyNeuraLogic源码分析

    引言 展示神经符号编程的力量 1. 简介 在过去的几年里,我们看到了基于 Transformer 的模型的兴起,并在自然语言处理或计算机视觉等许多领域取得了成功的应用。在本文中,我们将探索一种简洁、可解释和可扩展的方式来表达深度学习模型,特…

    2025年2月26日 编程技术
    200
  • Python Sklearn中超实用的隐藏功能有哪些

    1 .covariance.EllipticEnvelope 通常,在我们的所处理的数据分布中有异常值是很常见的,并且许多算法都可以处理离群值,而 ellipticalenvelope 就是 sklearn 中直接内置的一个例子。该算法的优…

    2025年2月26日 编程技术
    200
  • Python进程间的通信方式是什么

    什么是进程的通信 这里举一个通信机制的例子:我们都很熟悉通信这个词,比如一个人想给他的女友打电话。一旦通话建立,便会形成一个隐式的队列(请注意这个术语)。此时这个人就会通过对话的方式不停的将信息告诉女友,而这个人的女友也是在倾听着。我认为在…

    2025年2月26日 编程技术
    200
  • Python中的有监督学习是什么?

    python中的有监督学习是什么? 在Python数据分析中,有监督学习算法在机器学习领域中占据重要位置。这种学习方式利用已知输入和输出来训练模型以预测未知输入的输出。简而言之,有监督学习是将样本数据中的输入变量和输出变量联系起来,并利用已…

    编程技术 2025年2月26日
    200
  • Python中的朴素贝叶斯算法是什么?

    python中的朴素贝叶斯算法是指一种基于贝叶斯定理的分类算法,它利用所谓的“朴素”的假设,即各个特征之间是独立的,从而对文本进行分类。在机器学习领域,朴素贝叶斯算法已经成为一种广泛应用的算法,并且被用于众多领域,如垃圾邮件过滤、情感分析等…

    编程技术 2025年2月26日
    200
  • 如何在Python中使用开源数据集?

    随着大数据时代的到来,数据分析和机器学习已经成为了热门领域。然而,对于初学者来说,如何获取数据集并进行分析和训练模型可能会是一个困难的任务。为了解决这个问题,开源社区已经提供了丰富的数据集,并且python作为一种流行的编程语言,也提供了各…

    编程技术 2025年2月26日
    200

发表回复

登录后才能评论