范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

行为验证码验证类型的讲解

  前言
  最近在开发行为验证码,经常触及到关于验证类型的相关内容。但使用起来不太熟练,闲暇之余,总结一下我对行为验证码验证类型的理解。
  验证类型概述
  滑动拼图
  创新行为式验证,轻松一滑完成拼图,体验极佳,秒速通过验证。 简洁高效,在保障用户极致体验的同时,抵御机器风险。适用于追求用户体验的场景。# 生成背景图   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())
  字体识别
  点击与其它字符不同字体的文字,用户仅需一次点击,即可进行安全验证。适用于安全要求超高的业务场景。# 字体识别 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顺时针旋转形式)
  空间推理
  根据提示,点击对应的元素。逻辑解题能力结合图形符号等元素识别能力。适用于安全要求超高的业务场景。
  下面举例几种验证方式: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} 总结
  以上便是本文的全部内容,相关代码我已经放上 Github 了,   https://github.com/KgCaptcha,这里我做了一个示例:  https://www.kgcaptcha.com/demo/ 。

准妈妈们,注意这些,可避免宝宝出生缺陷生育一个健康的宝宝,是每一个家庭的心愿,近年来,由于环境污染高龄生育基因突变等因素,出生有缺陷的宝宝是越来越多。严重的缺陷是导致早期流产死胎围产儿死亡婴幼儿死亡和先天残疾的主要元凶游戏指引了我们,不可久留于一处大多数玩游戏的朋友都知道英雄联盟这款竞技游戏。一度风靡全球,曾几何时,网吧显示器如出一辙,当年为了组队开黑一起在网吧度过了无数个风雨夜晚,回想起来,那种开黑的兴奋感任欢呼雀跃。IG原神3。1前瞻精彩内容汇总,活动奖励沙漠新玩法七星召唤各位玩家大家好,欢迎来到游视姬!这里提供原神最新的前瞻资讯及玩法攻略,感谢您的关注!原神3。1前瞻估计很多玩家朋友都看过了,没有看过或者没有时间看的玩家也别着急,这里整理了最全的核上半年游戏业绩透视新游上线不足研发成本难减本报记者许心怡吴可仲北京报道进入2022年以来,中国游戏行业迎来转折国内收入增长见顶,海外成为新的掘金市场中国经营报记者梳理发现,上半年18家游戏上市公司的收入超10亿元,7家同比游戏王怪兽卡水族(8)空气循环机()空牙团的舵手赫耳玛(空牙団舵手)空牙团的舵手赫耳玛(空牙団舵手)气象报告员()气象报告员()气象精灵()气象精灵()寝青蛙(寝)寝青蛙(寝)轻盈水星(Thetripp肉鸽游戏,永远滴神!个人向小众roguelite游戏体验随笔(1)前言自打诞生伊始,rogue(下文简称肉鸽)这一游戏类型就吸引了全世界的目光。相对较高的难度传统的RPG玩法广泛的随机内容,是该分支下的作品得以经久不衰的主要原因。时代的车轮不停转华为Mate50系列5G通信手机壳曝光与手机同步开售,定价或799元Tech星球9月18日消息,此前华为召开Mate50系列及全场景新品秋季发布会引发关注。会上,华为正式发布Mate50系列手机,并公布标准版售价4999元起,将于9月21号开售。虽iPhone14Pro必试用动态岛玩撞珠游戏iPhone14Pro的动态岛是新机的最大特点,它能够令iPhone的多工作业变得更便,不过有开发者就将动态岛用作消闲之用,开发了一款撞珠游戏,十分有趣。游戏相同简单,动态岛上方变游戏王怪兽卡水族(7)骷髅章鱼()狂怒龙虾()狂怒龙虾()拉弓的人鱼(弓引)拉弓的人鱼(弓引)里青蛙(裏)里青蛙(裏)龙虾怪()龙虾怪()满潮鱼人(満潮)满潮鱼人(満潮)梦魇企鹅()梦魇企鹅(美杜莎传奇,2022最新游戏实战攻略出炉啦!建议收藏美杜莎传奇上线已经接近一年一个新游戏上线时间越久,玩法和攻略也会日益成熟,美杜莎传奇他是根据176冰雪传奇进行改动升级的,上线满攻速,一秒五刀。她延续了冰雪传奇的游戏机制,如逆天改为什么蔚小理跌跌不休,原来是赛力斯来了赛力斯同Mate50同台发布已经说明一切,华为要有多大的决心才会将中国品牌皇冠的荣辱于一介草民赛力斯共舞??从零起家的华为对于发展超越当然心知肚明,自有一套。很多人担心赛力斯会不会中国男篮世预赛大名单出炉,赵睿落选令人意外,凭啥胡明轩还入选男篮世预赛大名单争议不断,亚洲杯胡明轩的表现堪称灾难级,甚至上赛季在俱乐部的表现也配不上FMVP的名头。很多人理所当然的觉得他主要因为是杜锋的亲信所以才能进入国家队,而明显比他更强2千多中国人居住在马拉维,30多家中资企业,马拉维中国人现状目前在马拉维华人华侨有2000余人,主要集中在首都利隆圭和南部区首府布兰太尔。有30多家中资企业,中资企业员工有1000多人,其中规模比较大的中国企业有中非棉业棉花公司中土集团特变前期发布了vivoX80Pro新机,vivoX70价比老人机创低价新纪录前期发布的vivoX80Pro新机屏幕也是不俗,正面是中间单挖孔设计,虽然是曲面屏,但好在曲率不是很高,握持感极为不错。而且vivoX80Pro采用的是一款6。78英寸的三星AMO30!英超倒数第一火力全开两回合狂轰6球,8000万先生躺赢当欧冠抽签进行得如火如荼的时候,2223赛季欧协联附加赛次回合也激战正酣,英超劲旅西汉姆联客场对阵弱旅维堡。经过90分钟较量,斯卡马卡绍切克和本拉赫马各建一功,西汉姆联30轻取对手4年狂跌9200万!大英帝星陨落,曾身价过亿,如今被兰帕德驱逐阿里这个名字已经很少出现在球迷的眼前,曾经热刺的天才进攻手,如今已经消失在媒体的报道当中。从热刺离开之后,在埃弗顿仅仅半个赛季的时间,兰帕德也终于受不了了。据英格兰媒体的报道,埃弗巴萨4亿欧元豪购3人,如今留队1人离队2人,亏损超3。5亿欧元巴塞罗那俱乐部自2017年8月将内马尔以创纪录的2。22亿欧元卖给巴黎俱乐部后,球队就开始了各种败家操作,先是2017年8月以1。5亿欧元从多特蒙德签入登贝莱,然后2018年1月以安东尼评NBA最强阵容控卫魔术师,分卫科比,小前锋出人意料安东尼是进攻万花筒,在他职业生涯中,虽说到现在为止都还没有获得总冠军多少有一些遗憾,但他可是被科比表示过最难防守的球员。在安东尼的职业生涯中场均能够得到23。1分,总得分进入了NB转会市场买人开支等同西德意总和英超财力一抵三热苏斯(左起)斯特林与哈兰德成为英超今夏转会市场的焦点人物。网络图片距离夏天转会市场关闭剩余一周,但截至周二,英超买人支出已超过十四亿三千萬镑(约一百三十二亿港元),创下联赛历史新斯基拉西班牙人有意都灵31岁中锋扎扎,球员可能在今夏离队直播吧8月25日讯据意大利记者斯基拉透露,西班牙人对都灵前锋扎扎感兴趣,球员可能在今夏离队。斯基拉指出,31岁的意大利中锋扎扎不在都灵主帅尤里奇的计划之内,他可能在今夏离开球队,而博主华人前锋获西班牙U19全国联赛金靴,此前被推荐给03国青直播吧8月25日讯据博主中国海外球员新闻报道,上赛季获得西班牙U19全国联赛金靴的华人前锋LinchaoLiuZhou此前他曾被推荐给了03年龄段国青。博主josehidalgo透欧冠32强分档出炉,英超保持强势,多特国米将造死亡之组欧冠32强分档出炉,英超保持强势,多特国米将造死亡之组随着欧冠资格赛顺利结束,新赛季欧冠32强已经全部就位,根据欧战积分联赛排名进行的4个分档也全部分配完毕,小组赛抽签将在8月26
太阳活动逐渐活跃,如何观测其表面的小黑痣?新华社南京10月25日电(记者朱筱邱冰清)太阳带给人类光和热,它的一举一动,都会对地球产生影响。人们常听到的太阳黑子,是太阳表面可以看到的最突出现象,也是太阳活动的明显标志之一。随外星人若入侵谁能预警拯救人类?美国靠边站,外媒只有中国能行在美国好莱坞出品的科幻电影中,经常可以看到外星人搭乘星际战舰入侵地球,美国大兵代表全人类,反制外星人入侵的片段。虽然目前人类还没有寻访到外星人的踪迹,但并不意味着外星人就不存在,如出舱后翟志刚怕地球飘跑了!这个走得最快的中国人充满了等待综合整理自中国青年报,微信公众号央视新闻(IDcctvnewscenter)我们的太空(IDourspace0424)央视军事(CCTV7Junshi)CCTV国家记忆(IDcct1979年,美国一餐馆老板对中国女游客说在朝鲜,我当过您的俘虏1979年,一名中国女游客和她常住在美国的一名老同学一起,前往白罗克博物馆游玩,最后被留下与博物馆的工作人员一起参加聚餐,没想到的是,就在聚餐的过程中,餐馆的老板在看见这名中国女游时隔19年重回中国!2023中国亚洲杯会徽及10座承办城市标识公布10月22日晚,2023中国亚洲杯会徽正式发布,以中国传统的红黄配色为主调,象征着光芒团结和谐多元希望。十座承办城市的标识也同步揭晓。2023年6月16日至7月16日,中国亚洲杯将三星杯16强次日中国3胜1负,申真谞成功突围,8强连笑将战朴廷桓午安各位棋友,今天是第26届三星杯第4个比赛日,16强第2天的四局比赛继续进行,结果如下范廷钰负申真谞杨鼎新胜金志锡赵晨宇胜山下敬吾连笑胜安成浚范廷钰本局在开局下得过于保守被申真谞幕后故事手舞矩阵领舞汪伊美通过节奏感受音乐和身后矩阵完美融合在260人组成的整齐划一的矩阵的最前面,一袭红衣的舞者汪伊美舞动长袖,英姿飒爽,整个画面动静结合,赏心悦目。在全国第十一届残运会暨第八届特奥会开幕式文体展演第三篇章奋斗时代中,手语易烊千玺谷爱凌主演,北京冬奥会火炬传递故事短片冰雪之约首映来源中国青年报客户端中国青年报客户端讯(中青报中青网记者沈杰群)10月22日,北京2022年冬奥会火炬传递故事短片冰雪之约在京首映并于全网发布。该片由导演丁晟执导,青年演员易烊千玺祝您健康快乐时下人们相互交往间使用的祝福语,越来越多的是祝福对方健康快乐。这是因为,较之钱财名禄,健康快乐更是人的幸福所在。人如果失去健康,一切都会成为浮云,而心态常戚戚,就难以有生活的欢欣。孩子上幼儿园时,家长记住3不要4要,宝宝更快适应校园生活文菁妈每年秋季是新生入学的学期,当然也是孩子们上幼儿园的时期。家有三岁的孩子,大都会选择在秋季这学期送孩子上幼儿园小班。三岁的孩子可以自己拉尿,自己吃饭,语言表达能力也比较顺畅,而做好这3类运动孩子多长高48厘米!快看看你家的孩子做对了吗?因为运动有利于刺激生长激素的分泌,同时增加孩子食欲,促进孩子肠消化和吸收,还能提高孩子的体能和免疫力。孩子在运动后胃口好,消化好,少生病,自然吃嘛嘛香,个子高高了!既然运动可以帮助