验证码系列-2-图片验证码生成

图片验证码生成原理

图片验证码一般是 26 个字母加 0 到 9 随机数生成,比如生成 4位或者6位的数字英文验证码。一般不区分大小写。生成之后通过调用画图方法画到承载验证码的带底色的图片中,页面显示时是一带验证码张的图片。
这种可能会被软件破解识别。可以加一些颜色或者线条的混淆来 降低识别率来,一定程度上防止被破解。

图形验证码可调整的主要属性如下:

  • 验证码的字体
  • 验证码的字体大小
  • 验证码的字体颜色
  • 验证码内容的范围(数字、字母、中文汉字)
  • 验证码的图片大小。 边框、边框粗细、边框颜色
  • 验证码的干扰线
  • 验证码的样式(3D, 普通模糊)

验证码生成最佳实践

  • 用不同的颜色渲染字符
  • 使某些字符比背景更暗,并使某些字符更亮
  • 为背景和角色使用渐变色
  • 不要将所有字符垂直对齐
  • 不要回答单词,以便可以使用字典
  • 使用更多的字符和符号
  • 使用大写和小写字符
  • 每次使用不同数量的字符
  • 更加剧烈地旋转一些字符(即倒置)
  • 做更多的字符重叠
  • 使单个字符的一些像素不接触
  • 网格线与相同颜色的字符交叉
  • 考虑问自然语言问题

验证码库

以下采集了来自网络上常用的验证码库:

Java验证码生成库 JCaptcha
Struts验证码插件 JCaptcha4Struts2
Java图形验证码 SimpleCaptcha
Java验证码 kaptcha
Java验证码 patchca
Java验证码生成库 imageRandom
iCaptcha
Java图片验证库SkewPassImage
Java 验证码 Cage

Python pycapt
PHP Gregwar/Captcha
PHP mewebstudio/captcha

Node node-captcha
Node gifcaptcha

参考

cnn_captcha

Image placeholder
timeapp-video
未设置
  15人点赞

没有讨论,发表一下自己的看法吧

推荐文章
基于 Laravel 命令行开发 API 代码生成器

1.命令行文件生成 $phpartisanmake:commandApiGenerator 2.编写代码模板 就像你看到的,我使用了php的heredoc方式,不太优雅。开始用的文件方式,但是不支持

css添加图片怎样找图片路径?

css添加图片怎样找图片路径?在CSS文件里,有时要用到background-image,即加一个背景图片,一般在显示标题时会经常用到。现在来看两个文件目录:/css/admin/main.css//

采用 PHP-quickorm/Captcha,用最快的速度在 PHP 语言下实现验证码功能

要调用起这个库,门槛十分低,但是建议满足以下几个条件: PHP5+ PHPGD扩展 Composer(非必须) 安装方法 首先我们花30秒来引入一下这个库,主要有以下两种方式。 其一、使用Comp

Java 与 Kotlin 系列文章 (一):性能问题

随着对Kotlin越来越深入的了解,我发现市面上关于Kotlin方面,比较深入的资料几乎是0,所以我决定,将Kotlin各个方面的研究作为我的研究生课题,而性能问题往往是程序员最佳关注的内容,所以第

API 系列 - 深入浅出 JSON Web Token

原理Web应用可分为客户端和服务端,这两者之间经常需要进行身份认证。由于HTTP是无状态协议,不能保存认证后的用户状态,因此,每一次发送请求都需要重复的进行认证。为了解决该问题,通常会使用Cookie

《PHP 微服务练兵》系列教程

本系列教程将从零开始使用PHP搭建微服务,涉及知识docker、mysql、Elasticsearch+Kibana日志分析系统、minio文件储存、阿里ACM配置中心、jenkens自动化测试部署、

TPC-C解析系列03_TPC-C基准测试之SQL优化

TPC-C是一个非常严苛的基准测试模型,考验的是一个完备的关系数据库系统全链路的能力。这也是为什么在TPC-C的榜单前列,出现的永远只是大家熟知的那几家在业界有着几十年积累、从关系数据库理论开始发展就

TPC-C解析系列05_TPC-C基准测试之存储优化

TPC-C规范要求被测数据库的性能(tpmC)与数据量成正比。TPC-C的基本数据单元是仓库(warehouse),每个仓库的数据量通常在70MB左右(与具体实现有关)。TPC-C规定每个仓库所获得的

Nebula 架构剖析系列(二)图数据库的查询引擎设计

摘要上文(存储篇)说到数据库重要的两部分为存储和计算,本篇内容为你解读图数据库Nebula在查询引擎QueryEngine方面的设计实践。在Nebula中,QueryEngine是用来处理Nebula

“第 1 份工作,我只干了 2 周就被辞退了” | 十年系列

我是一个有故事的程序员。01.写在前面十年前,我还是象牙塔中数学系的一名普通的大三学生。九年前,我是富士康流水线工厂的一名工人。六年前,我包里揣着3000 RMB来北漂。三年前,我在一家互联网金融公司

TPC-C解析系列01_TPC-C benchmark测试介绍

作者:阳振坤2019.10导语:自从蚂蚁金服自研数据库OceanBase获得TPC-C测试第一名后,引起了行业内外大量关注,我们衷心的感谢大家对OceanBase的支持与厚爱,也虚心听取外界的意见和建

【系列】股份制银行在职员工有多少?其中研发又有多少人?

本篇为系列文章第一篇,下一篇, 2018年,股份制银行在IT方面都花了多少钱,做了哪些事?摘要:虽然做过些与银行相关选题,比如《四大行、股份制银行、城商行都在使用什么数据库?》《银行数据库选型之秘》《

打好网络安全攻坚战 思科年度安全报告系列关注未知安全挑战

当网络攻击愈演愈烈,当勒索软件愈加嚣张,企业对于网络安全的重视程度稳步提升。网络安全在企业中的地位从没像今天这般高涨。但不可否认的是,即便企业提升了对网络安全的防护,但网络安全威胁依旧长期存在且愈加复

毕业即失业,找工作找到怀疑人生 | 十年系列

01.写在前面十年前,我还是象牙塔中数学系的一名普通的大三学生。九年前,我是富士康流水线工厂的一名工人。六年前,我包里揣着3000元RMB来北漂。三年前,我在一家互联网金融公司做到了技术负责人。两年前

TPC-C解析系列02_OceanBase如何做TPC-C测试

导语:蚂蚁金服自研数据库OceanBase登顶TPC-C引起业内广泛关注,为了更清楚的展示其中的技术细节,我们特意邀请OceanBase核心研发人员对本次测试进行技术解读,共包括五篇:1)TPC-C基

【Kubernetes系列】第5篇 Ingress controller – traefik组件介绍

1.概述为了能够让Ingress资源能够工作,在Kubernetes集群中必须至少有一个运行中的ingresscontroller组件。也就是说如果在kubernetes集群中没有一个ingressc

深圳流水线工厂,我差点和主管打了起来 | 十年系列

01.写在前面十年前,我还是象牙塔中数学系的一名普通的大三学生。九年前,我是富士康流水线工厂的一名工人。六年前,我包里揣着3000元RMB来北漂。三年前,我在一家互联网金融公司做到了技术负责人。两年前

TPC-C解析系列04_TPC-C基准测试之数据库事务引擎的挑战

OceanBase这次TPC-C测试与榜单上Oracle和DB2等其他数据库在硬件使用上有非常大的不同,OceanBase的数据库服务器使用的是204+3台型号是ecs.i2.16xlarge阿里云E

富士康14跳被我赶上了,流水线车间真的没有梦想|十年系列

一个不太安分的人。01.写在前面十年前,我还是象牙塔中数学系的一名普通的大三学生。九年前,我是富士康流水线工厂的一名工人。六年前,我包里揣着3000元RMB来北漂。三年前,我在一家互联网金融公司做到了

100%数据可用性承诺 VSP 5000系列如何改变存储行业规则

上个月,HitachiVantara在于拉斯维加斯举行的NEXT2019大会上,发布了其最新的企业级高端存储系统VSP5000系列产品。通过这款全面提升的企业级闪存阵列,致力于提供业界领先的性能和弹性

闲鱼Flutter互动引擎系列——整体设计篇

什么是Candy引擎Candy引擎是闲鱼技术团队设计开发的一款:APP嵌入式的、轻量级的、易于开发、性能稳定的互动引擎;绘制系统高度融合Flutter体系,游戏场景和FlutterUI支持无缝混排;动

Reactor系列(十九)StepVerifier测试

java#reactor#flux#StepVerifier测试视频讲解:https://www.bilibili.com/vide...FluxMonoTestCase.javapackagecom

leveldb源代码分析系列1:MemTable的实现

MemTable及其实现这是一个第零层的主题,预计扩展如下第一层主题:1.1comparator介绍1.2skiplist实现介绍1.3数据压缩相关介绍1.4Put流程1.5Get流程leveldb中

leveldb源代码分析系列1.1:memtable中comparator的实现

leveldb中memtable封装了一个skiplist用来存储真正的数据,跳跃列表的实现一定需要定义存储项的序关系,而在leveldb中这个序关系通过comparator相关类来实现。leveld

ES6系列之变量的解构赋值

1.什么是解构?ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构。它在语法上比ES5所提供的更加简洁、紧凑、清晰。它不仅能减少你的代码量,还能从根本上改变你的编码方式。2.数