图片验证码

JavaWeb生成图片验证码 在上网注册账号的时候一般都会有图片验证码的验证,防止恶意注册,最让人讨厌的莫过于12306的找你妹。。但是这也不失为一种好的办法,今天就用Javaweb的方式来生成一个图片验证码。大概流程图如下所示:  在myEclipse上新建一个web工程,创建一个Servlet类在doGet方法中实现上图中的方法:      1.在内存中构建出一个图片。 int width = 120; 阅读详情

图片验证码2

django 使用PIL生成验证码

python=3.6.8

django=2.1.8

Pillow=7.0.0

redis=3.3.1

工具形式的验证码生成,并存入redis
import random
import io
import redis
from PIL import ImageDraw, ImageFont, Image
from mysite.settings import BASE_DIR


def get_random_color():
    """
    定义随机的字体颜色
    :return:
    """
    R = random.randrange(255)
    G = random.randrange(255)
    B = random.randrange(255)
    return (R, G, B)


# 获取验证码视图
def mycode(image_id):
    # 画布
    img_size = (120, 50)
    # 定义图画对象
    image = Image.new('RGB', img_size, 'white')
    # 定义画笔对象
    draw = ImageDraw.Draw(image, 'RGB')
    # 定义随机字符串
    source = '0123456789'
    # 定义容器
    code_str = ''
    # 定义字体
    my_font = ImageFont.truetype(font="{}\\myutils\\fonts\\SourceCodePro-Bold.ttf".format(BASE_DIR), size=20)

    for i in range(4):
        # 获取随机颜色
        text_color = get_random_color()
        # 获取随机字符串长度下标(index)
        tmp_num = random.randrange(len(source))
        random_str = source[tmp_num]
        code_str += random_str
        # 将字符串添加到画布上
        draw.text((10+30*i, 20), random_str, text_color, font=my_font)
    # 建立缓存区
    buf = io.BytesIO()
    # 建立redis连接
    conn_redis = redis.Redis(host='127.0.0.1', port=6379, db=1)
    # 保存随机码到redis中
    conn_redis.set(image_id, code_str, ex=300)  # ex代表seconds,px代表ms
    # 保存图片
    image.save(buf, 'png')
    return buf.getvalue()

views.py
from django.views import View
from django.http import HttpResponse
from myutils.common import mycode
class RandomImageView(View):
    def get(self, request, image_id):  # 生成的验证码的key值
        return HttpResponse(mycode(image_id), 'image/png')

1234567
urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('random_image/<str:image_id>/', views.RandomImageView.as_view()),  # 随机生成验证码  ]

vue中Register.vue
<template>
    <div>
        <form >
            <ul>
                <li>
                    <label>用户名:</label>
                    <input type="text" v-model="username" >
                 </li>
                 <li>
                    <label>密&emsp;码:</label>
                    <input type="password" v-model="password" >
                </li>
                <li>
                    <label>验证码:</label>
                    <input type="text" v-model="image_code" class="msg_input" >
                    <img :src="image_code_url + code_cid + '/'" id="msg_code" @click="refresh"  alt="图形验证码" class="pic_code">
                </li>
                <li class="reg_sub">
                    <input type="submit" value="登 陆" name="">
                </li>
            </ul>
        </form>
    </div>
</template>

<script>
export default {
    data() {
        return {
            username: '',
            password: '',
            image_code: '',
            code_cid: '',
            image_code_url: 'http://127.0.0.1:8000/day01/random_image/',
            
        }
    },
    methods: {
        // 生成uuid随机字符串
        generate_uuid() {
            var d = new Date().getTime();
            if (window.performance && typeof window.performance.now === "function") {
                d += performance.now(); //use high-precision timer if available
            }
            var uuid = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(
                /[xy]/g,
                function(c) {
                var r = (d + Math.random() * 16) % 16 | 0;
                d = Math.floor(d / 16);
                return (c == "x" ? r : (r & 0x3) | 0x8).toString(16);
                }
            );
            return uuid;
        },
        // 点击图片刷新验证码
        refresh(){
            this.code_cid = this.generate_uuid()
        },
    },
    mounted() {  // 页面加载完成以后,生成验证码
        this.code_cid = this.generate_uuid()
    }
}
</script>

CBV形式的验证码(简单)
from django.conf import settings
from django.views import View
from django.http import HttpResponse
import random
import io
import redis
from PIL import ImageDraw, ImageFont, Image


class MyRandomStr(View):
    """
    定义验证码类,用来生成验证码
    """
    # 定义随机颜色
    def get_random_color(self):
        R = random.randrange(255)
        G = random.randrange(255)
        B = random.randrange(255)
        return (R, G, B)

    # 获取验证码视图
    def get(self, request, image_id):
        # 画布
        img_size = (120, 50)
        # 定义图画对象
        image = Image.new('RGB', img_size, 'white')
        # 定义画笔对象
        draw = ImageDraw.Draw(image, 'RGB')
        # 定义随机字符串
        source = '0123456789'
        # 定义容器
        code_str = ''
        # 定义字体
        my_font = ImageFont.truetype(font="{}\\myutils\\fonts\\SourceCodePro-Bold.ttf".format(settings.BASE_DIR), size=15)

        for i in range(4):
            # 获取随机颜色
            text_color = self.get_random_color()
            # 获取随机字符串长度下标(index)
            tmp_num = random.randrange(len(source))
            random_str = source[tmp_num]
            code_str += random_str
            # 将字符串添加到画布上
            draw.text((10+30*i, 20), random_str, text_color, font=my_font)

        # 建立redis连接
        conn_redis = redis.Redis(host='127.0.0.1', port=6379, db=1)
        # 保存随机码到redis中
        conn_redis.set(image_id, code_str, ex=5)  # ex代表seconds,px代表ms

        # 建立缓存区
        buf = io.BytesIO()

        # 保存图片
        image.save(buf, 'png')
        return HttpResponse(buf.getvalue(), 'image/png')

验证码(复杂)
from PIL import Image, ImageDraw, ImageFont
import redis
from verify.settings import FONTS_DIRS
import random
import os
from django.http import HttpResponse
import io

# Create your views here.

def generate_image_code(request, image_id):
    # 图片验证码
    '''
        本地图片验证码生成函数
    '''
    bgcolor = (random.randrange(20, 100), random.randrange(
        20, 100), random.randrange(20, 100))
    width = 110
    height = 40
    # 创建画面对象
    im = Image.new('RGB', (width, height), bgcolor)
    # 创建画笔对象
    draw = ImageDraw.Draw(im)
    # 调用画笔的point()函数绘制噪点
    for i in range(0, 100):
        xy = (random.randrange(0, width), random.randrange(0, height))
        fill = (random.randrange(0, 255), 255, random.randrange(0, 255))
        draw.point(xy, fill=fill)
    # 定义验证码的备选值
    str = '1234567890QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm'
    # 随机选取4个值作为验证码
    code_str = ''
    for i in range(0, 4):
        code_str += str[random.randrange(0, len(str))]
    # 构造字体对象

    fonts_files = os.path.join(
        FONTS_DIRS, 'SourceCodePro-Bold.ttf')
    font = ImageFont.truetype(fonts_files, 30)
    # 构造字体颜色
    fontcolor1 = (255, random.randrange(0, 255), random.randrange(0, 255))
    fontcolor2 = (255, random.randrange(0, 255), random.randrange(0, 255))
    fontcolor3 = (255, random.randrange(0, 255), random.randrange(0, 255))
    fontcolor4 = (255, random.randrange(0, 255), random.randrange(0, 255))
    # 绘制4个字
    draw.text((5, 2), code_str[0], font=font, fill=fontcolor1)
    draw.text((25, 2), code_str[1], font=font, fill=fontcolor2)
    draw.text((50, 2), code_str[2], font=font, fill=fontcolor3)
    draw.text((75, 2), code_str[3], font=font, fill=fontcolor4)
    # 释放画笔
    del draw
    # 存入缓存,用于做进一步验证,并设置超时时间为10分组
    print(rand_str)
    # 建立redis连接
    conn_redis = redis.Redis(host='127.0.0.1', port=6379, db=1)
    # 保存随机码到redis中
    conn_redis.set(image_id, code_str, ex=5)  # ex代表seconds,px代表ms
    buf = io.BytesIO()
    # 将图片保存在内存中,文件类型为png
    im.save(buf, 'png')
    # 将内存中的图片数据返回给客户端,MIME类型为图片png!
    return HttpResponse(buf.getvalue(), 'image/png')
Java-图片验证码--获得验证码、图片地址 参考:https://blog.youkuaiyun.com/tikaber/article/details/80492317 效果图: 生成图片验证码的工具类: package com.jfinal.util; import com.alibaba.fastjson.JSONObject; import com.jfinal.core.kit.PathKit; import javax.image... 阅读详情

相关推荐

图片验证码的制作

验证码验证是很多时候必不可少的功能。例如在账号登陆、新建用户、修改密码等等。验证码又分有很多种,有短信验证码、图片验证码、动态验证码等等。各个验证码有着各自不同的功能,现在就介绍一些图片验证码的制作,图片验证码一般是为了防止机器人去操作某个功能。也是起到不可或缺的重任的。 首先你得要创建一个实体类,我们需要把生产图片验证码的方法放到一个实体类里,方便查看也方便调用,既然是验证码那内容肯定...

qq_44211323的博客 1663

生成图象验证码函数

 生成图象验证码函数    Sub ValidateCode(ByVal VNum As String)        Dim Img As System.Drawing.Bitmap        Dim g As Graphics        Dim ms As System.IO.MemoryStream        gheight为图片宽度,根据字符长度自动更改

微笑的黄捷 871

用python制作图片验证码

准备 日常的网上冲浪中,我们登录或注册帐号时都少不了验证码。今天我们就用python模拟一下验证码。 在开始之前,我们先认识一下验证码的分类: 短信验证码:短信验证码是验证码中最常用的一种,我们在注册或登录时输入你的手机号后,通过短信的方式发给你4~6位数字以验证。 拼图验证码:这种验证码现在已经不怎么常用了,使用方法是给你一幅图,但那个图有一个空缺的地方,你要把它空缺的那一部分移到正确的位置以验证,淘宝电脑版的注册上就有运用该验证码。 图片验证码:这种验证码也不怎么常用,这种验证码的验证方法是给你一副图

weixin_50259832的博客 1086

简单的验证图片生成函数

 本函数可以生成简单的验证图片,用于输入的验证。function yzm($name,$width,$height){Header("Content-type: image/PNG");srand((double)microtime()*1000000);//播下一个生成随机数字的种子,以方便下面随机数生成的使用session_start();//将随机数存入session中$_SES

jakeycis的专栏 456

基于FFT的阵列方向图快速计算公式推导

因为自己毕设涉及到阵列方向图综合相关知识,最近阅读了关于方向图综合的相关文献,就其中关于使用FFT计算阵列方向图的方法进行了公式推导。 简介: 自从1965年Colley-Tukey发表快速傅里叶变换[1]论文以来,FFT在许多科学技术领域获得了广泛和成功的应用。在阵列信号处理与雷达信号处理领域,随着科技的发展,对于电尺寸较大的相控阵天线,使用公式按照级数求和计算天线阵列方向图的方法效率甚低,...

qq_38151438的博客 4290

注意力机制详解

注意力机制详解Attention机制由来Attention定义Encoder-Decoder框架存在问题:Attenion机制的引入Attention机制的类别Hard AttentionSoft AttentionGlobal AttentionLocal AttentionSelf AttentionMulti-head Attention附录—Transformer全局视角Tensor视角Encoder部分Self-AttentionSelf-Attention向量计算Self-Attention的矩

weixin_43236310的博客 1万+

python 基于pillow模块生成随机图片验证码教程

效果图 我们先来看一下大致的效果图。 以上图形都是用非常基础的元素构成的:点,线,曲线,文本。而pillow模块远远不止这些功能,如果学好了它,真的就是你想怎么花就怎么花。 那么现在我们就去学习一下它的简单使用吧! pillow的基本使用 安装pillow模块 pillow属第三方模块,我们需要使用pip进行下载。值得注意的是,早期该模块名为PIL,后来改成pillow。 pip install pillow 创建画布 创建画布前需要导入pillow中的Image。该模块既能生成一张图片在上面做修改,也

lishuaigell的博客 3718

Ubuntu双系统引导修复实战:boot-repair工具详解

本文详细介绍了使用boot-repair工具修复Ubuntu双系统引导丢失问题的实战方法。当GRUB引导菜单因安装新系统或更新而损坏时,通过制作Ubuntu启动盘进入Live环境,安装并运行boot-repair,可一键完成系统修复引导,自动化执行GRUB重装与配置,解决无法进入Windows或Ubuntu的常见故障。

weixin_29224589的博客 356

图片验证码生成

图片验证码生成 package com.cms.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.imageio.ImageIO; import...

Tryndamere-K的博客 809

【科研导航】【计算机视觉与图像处理】从顶刊到潜力股:跨学科(电子/电气/信息)SCI期刊投稿全景图

本文全面解析了计算机视觉与图像处理领域的SCI期刊投稿策略,涵盖从顶刊到潜力股的各类期刊特点。重点介绍了IEEE Transactions系列、Elsevier旗舰期刊以及二区优质期刊的审稿偏好和投稿技巧,特别适合电子/电气/信息交叉学科的研究者。文章还提供了三区、四区期刊的实用投稿建议,帮助科研新手快速找到适合的发表平台。

weixin_30897233的博客 81

国内网络环境下Leaflet加载OpenStreetMap地图的5种替代方案(附可用瓦片地址)

本文针对国内网络环境下Leaflet加载OpenStreetMap地图的常见问题,提供了5种可用的瓦片替代方案,包括OpenStreetMap.fr HOT、OpenStreetMap.de、CartoDB、Stamen和Thunderforest,并附上详细的代码示例和选择建议,帮助开发者解决地图加载问题。

qsc901234的博客 1684

python生产图片验证码

做毕设的时候用到的,有注释。 默认是生成5位大写的字母,如果想修改位数就修改char_length(第5行),想修改生成的是字母或者是数字可以改第12行的randint范围。参照ASCII from PIL import Image, ImageDraw, ImageFont, ImageFilter import random def check_code(width=120, height=30, char_length=5, font_file='Monaco.ttf', font_size=28

蔡尼玛的博客 275

海康visionmaster开发笔记10-集成HALCON第三方算子到VM工具箱的方法

海康visionmaster开发笔记10-HALCON第三方算子到VM工具箱的方法

视觉人机器视觉的博客 4346

如何生成验证码图片

开发工具与关键技术:Visual Studio + C# 撰写时间:2019.6.16 在我们日常生活中所使用到的登录页面,经常会遇到需要输入验证码登录,根据生成的验证码图片输入正确的字符串(一般都是字母+数字)进行验证,验证码不正确则无法验证登陆。那么我们是如何去随机生成不同的验证码图片的呢?下面就来进行简要的介绍。 如下图,是我们经常看到的登陆界面的验证部分,如果...

weixin_44541136的博客 1万+

Python电梯II

输入数据有若干组(最多不超过1000组),每组数据的第一行为四个如题目中所示的整数N,u,d,s,由空格分隔开。第二行为不同楼层需要上下楼的请求, 最多不超过1000个。每个请求的格式为"from-to",其中"from"和"to"为所在楼层和要到达的楼层,保证from!=to。

沐风—云端行者 909

两点调制原理以及RF DAC和PLL SDM两条输入路径理解

特性数据本质原始数字比特流 (0/1)平滑后的预失真波形数据连接对象Σ-Δ调制器 (SDM)的小数输入RF DAC在系统中的角色主调制路径:通过改变PLL分频比产生频率偏移辅助补偿路径:通过RF DAC产生补偿电压,校正PLL失真可否加入延时可以且必须。用于数字时序对齐,对性能无影响。绝对不可以。会导致补偿失配,严重破坏信号频谱。功能目标实现数字域的频率调制确保模拟域的波形和频谱完美因此,在您所描述的这种先进发射机架构中,2-point数据是数字指令,送给SDM;

m0_49540263的博客 604

Java实现图片验证码,点击刷新图片验证码

创建生成验证码图片的工具类: import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.FileOutputStream; import java.io.IOException; i...

琪丶琪的博客 4314

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

生成登录验证码,点击更换验证码图片

验证码最终效果: 直接上代码: 1、 service层代码 /* * 生成验证码 并将验证码转化为图片的业务 * */ public class VerificationCodeService { public VerificationCodeService() { } // 生成验证码字符串 -- 随机数 public String createRandomCode() { String str = "ABCDEFGHIJKLMNOPQRSTUVWX

Java小皮孩 4170

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

还在用图片验证码来刁难用户么?教你彻底去除图片验证码!

图片验证码是验证码的一种,图片验证码常见的形式有输入图片中字母、数字等,目前的发展更为多元。下面小编从多方面跟大家讲讲图片验证码。 ➤验证码的前世今生 全自动区分计算机和人类的图灵测试(Completely Automated Public Turing test to tell Computers and HumansApart,简称CAPTCHA),俗称验证码,是一种区分用户是计算机或人的全自动化程序。 标准验证码 标准验证码即是我们常见的图形验证码、语音验证码,基于机器难以处理复杂的计算机视觉.

weixin_46641057的博客 1万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

图片验证码 java_java生成图片验证码

介绍验证码的目的是为了防范恶意攻击,如在发送手机短信之前校验验证码,可以防止短信接口被恶意调用导致的金钱损失。验证码有图片验证码,更智能的拖动验证码,点选验证码,今天我们看一下图片验证码的实现。实现添加maven依赖com.github.pengglekaptcha2.3.2public class Client {public static void main(String[] args) th...

weixin_31579367的博客 625

【Python 图片验证码】——生成随机图片验证码 并打印验证码的值

使用python生成一个图片验证码,随机的,可以由于验证人机和别的啊,很方便很简单 点个赞留个关注吧!! 导入模块 import random from PIL import Image,ImageFont,ImageDraw 生成随机验证码 def rndtxt(): txt_list = [] # 大写字母 txt_list.extend([i for i in range(65,90)]) # 小写字母 txt_list.extend([i f

₰₯₮ 的博客 10万+

图片验证码和短信验证码开发

图片验证码和短信验证码开发 tip :前后端分离,先开发后端,后完善前端 一、图片验证码流程 1、引入captcha包放入utils 不是独立的第三方包放入utils,独立的包放入libs里面 captcha.py 里的生成验证码方法captcha.generate_captcha() response_code.py 是各种的错误返回说明 commons.py 是定义的正则表达转换器 ...

F_Liberalism的博客 2020

图片验证码的原理

图片验证码的原理 1、流程逻辑(首先我们要知道图片验证码的逻辑) a)  生成图片验证码,当然生成验证码的具体实现可以放在另一工程中或者其他的服务器上(可以通过dubbo调用生成验证码服务); b)  用户输入界面上的图片验证码 c)  进行服务端校验 2. 校验设备id值是否正确(DeviceId)已经解密(生成需要传入唯一标示,大多数是选择以设...

weixin_53911715的博客 3809

图片验证码获取及验证

** 图片验证码获取及验证 ** 服务层 接口 代码片. public BufferedImage getImage(HttpSession httpSession); 实现类 代码片. @Override public BufferedImage getImage(HttpSession httpSession) { BufferedImage bufferedImage = new BufferedImage(W, H, BufferedImage.TYPE_INT_BGR); Graphi

孤独时代的阿呆il的博客 7637

爬虫图片验证码处理

目前,很多网站为了防止爬虫爬取,登录时需要用户输入验证码。下面我们学习如何在爬虫程序中识别验证码。其中包含验证码。页面中的验证码图片对应一个元素,即一张图片,浏览器加载完登录页面后,会携带之前访问获取的Cookie信息,继续发送一个HTTP请求加载验证码图片。和账号密码输入框一样,验证码输入框也对应一个元素,因此用户输入的验证码会成为表单数据的一部分,表单提交后由网站服务器程序验证。

几许的博客 2054
上一篇: 阿里云短信服务的使用--获取短信验证码
下一篇: 图片验证码及使用django-redis缓存
chenliang8518
博客等级 码龄6年 0粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值