JS生成登录验证码

采用js生成登录的验证码

采用的技术点有html,css,JS,jQuery

HTML:

<div class="box_b">
			<img src="./img/0775639c-c82c-4a29-937f-d2a3bae5151a.png" alt="">
			<div class="register">
				<h1>登录</h1>
				<div class="register_r">
					<span>账号:</span>
					<input type="text" placeholder="请输入您的账号">
				</div>
				<div class="register_r">
					<span>密码:</span>
					<input type="password" placeholder="请输入您的密码" >
				</div>
				<div class="register_e">
					<span>验证码:</span>
					<input type="text" placeholder="请输入验证码验证" id="verification">
					<canvas id="c1" width="100" height="35" style="border:1px solid black"></canvas>
				</div>
				<div class="register_g">
					<input type="checkbox">
					<span>记住账号密码</span>
				</div>
				<button class="register_i">登录</button>
			</div>
		</div>

css:

.box_b {
	width: 100%;
	height: 450px;
	position: absolute;
	top: 50%;
	left: 50%;
	transform: translate(-50%, -50%);
	display: flex;
	justify-content: space-around;
}

.box_b img {
	width: 500px;
	height: 550px;
}

.register {
	width: 480px;
	height: 400px;
	background-color: #E0E0EF;
	margin-top: 50px;
}


.register h1 {
	text-align: center;
	line-height: 80px;
}

.register span {
	font-size: 20px;
}

.register_r {
	width: 100%;
	display: flex;
	justify-content: space-evenly;
	line-height: 60px;
	text-align: center;
	align-items: center;
}

.register_r input {
	width: 300px;
	height: 35px;
	outline: none;
	padding-left: 10px;
	border: none;
}

.register_e {
	width: 100%;
	display: flex;
	justify-content: space-evenly;
	line-height: 60px;
	text-align: center;
	align-items: center;
}

.register_e input {
	width: 140px;
	height: 35px;
	outline: none;
	padding-left: 10px;
	border: none;
	margin-right: 30px;
}

.register_g {
	display: flex;
	align-items: center;
	margin-left: 40px;
}

.register_g input {
	width: 20px;
	height: 20px;
	margin-right: 7px;

}

.register_i {
	background-color: #298DFB;
	width: 84%;
	line-height: 50px;
	color: #fff;
	margin-top: 5%;
	border-radius: 5px;
	text-align: center;
	margin-left: 8%;
	border: 1px #E4E7ED ridge;
	font-size: 20px;
	cursor: pointer;
}

#c1 {
	vertical-align: middle;
	box-sizing: border-box;
	cursor: pointer;
	margin-right: 10px;
}

JS:

$(function() {
	// 存放随机的验证码
	var showNum = []

	draw(showNum)

	$("#c1").click(function() {
		draw(showNum)
	})
	$(".register_i").click(function() {
		var s = $("#verification").val().toLowerCase()
		var s1 = showNum.join("")
		if (s == s1) {
			alert("提交成功")
		} else {
			alert("验证码错误")
		}
		draw(showNum)
	})


	// 封装一个把随机验证码放在画布上
	function draw(showNum) {
		// 获取canvas
		var canvas = $("#c1")
		var ctx = canvas[0].getContext("2d")
		// 获取画布的宽高
		var canvas_width = canvas.width()
		var canvas_height = canvas.height()
		//  清空之前绘制的内容
		// 0,0清空的起始坐标
		// 矩形的宽高
		ctx.clearRect(0, 0, canvas_width, canvas_height)
		// 开始绘制
		var scode =
			"a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,1,2,3,4,5,6,7,8,9,"
		var arrCode = scode.split(",")
		var arrLength = arrCode.length
		for (var i = 0; i < 4; i++) {
			var index = Math.floor(Math.random() * arrCode.length)
			var txt = arrCode[index] //随机一个字符
			showNum[i] = txt.toLowerCase() //转化为小写存入验证码数组
			// 开始控制字符的绘制位置
			var x = 10 + 20 * i //每一个验证码绘制的起始点x坐标
			var y = 20 + Math.random() * 8 // 起始点y坐标

			ctx.font = "bold 20px 微软雅黑"
			// 开始旋转字符
			var deg = Math.random * -0.5
			// canvas 要实现绘制内容具有倾斜的效果,必须先平移,目的是把旋转点移动到绘制内容的地方
			ctx.translate(x, y)
			ctx.rotate(deg)
			// 设置绘制的随机颜色
			ctx.fillStyle = randomColor()
			ctx.fillText(txt, 0, 0)

			// 把canvas复原
			ctx.rotate(-deg)
			ctx.translate(-x, -y)

		}
		for (var i = 0; i < 30; i++) {
			if (i < 5) {
				// 绘制线
				ctx.strokeStyle = randomColor()
				ctx.beginPath()
				ctx.moveTo(Math.random() * canvas_width, Math.random() * canvas_height)
				ctx.lineTo(Math.random() * canvas_width, Math.random() * canvas_height)
				ctx.stroke()
			}
			// 绘制点
			ctx.strokeStyle = randomColor()
			ctx.beginPath()
			var x = Math.random() * canvas_width
			var y = Math.random() * canvas_height
			ctx.moveTo(x, y)
			ctx.lineTo(x + 1, y + 1)
			ctx.stroke()
		}
	}

	// 随机颜色
	function randomColor() {
		var r = Math.floor(Math.random() * 256)
		var g = Math.floor(Math.random() * 256)
		var b = Math.floor(Math.random() * 256)
		return `rgb(${r},${g},${b})`
	}
})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/218904.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MIT线性代数笔记-第23讲-微分方程,exp(At)

目录 23.微分方程&#xff0c; e x p ( A t ) exp(At) exp(At)用矩阵求解微分方程矩阵指数二阶常微分方程 打赏 23.微分方程&#xff0c; e x p ( A t ) exp(At) exp(At) 用矩阵求解微分方程 例&#xff1a; { d u 1 d t − u 1 2 u 2 d u 2 d t u 1 − 2 u 2 \left \{ \b…

什么是呼叫中心的语音通道?呼叫中心语音线路有几种?

什么是呼叫中心的语音通道&#xff1f; 呼叫中心的语音通道是指在呼叫中心中使用的语音信号传输通道&#xff0c;它是呼叫中心中至关重要的一部分&#xff0c;负责将客户的语音信息传递给客服代表&#xff0c;以及将客服代表的语音信息传递给客户。在呼叫中心的运营中&#xf…

【UE】UEC++委托代理

目录 【UE】UEC委托代理 一、委托的声明与定义 二、单播绑定与解绑 三、多播绑定与解绑 四、动态单播绑定与解绑 五、动态多播绑定与解绑 六、委托的调用 七、运行结果 1、运行开始 2、调用单播 3、调用多播 4、调用动态单播 5、调用动态多播 6、运行结束 【UE】…

傻傻分不清楚的分区、分库、分表

一、分区 MySQL 在 5.1 时添加了对 分区&#xff08;即水平分区&#xff09; 的支持。MySQL 的物理数据存储在表空间文件&#xff08;.ibdata1和.ibd&#xff09;中&#xff0c;分区 的意思是指将同一表中不同行的记录分配到不同的物理文件中。有几个分区就有几个 .idb 文件。…

到手价价格监测如何实现

渠道中的低价数据是品牌非常头疼的问题&#xff0c;治理低价、乱价也是在治理窜货&#xff0c;品牌需要长期执行&#xff0c;并且要有监测渠道价格的能力&#xff0c;监测价格不能只对页面价进行输出&#xff0c;要监测链接中的到手价&#xff0c;这就包含对所有促销信息内容的…

Netty01-NIO与BIO

NIO 什么是NIO Java NIO 全称 java non-blocking IO&#xff0c;是指JDK 1.4 及以上版本提供的新API&#xff08;New IO&#xff09;。从 JDK1.4 开始&#xff0c;Java 提供了一系列改进的输入/输出的新特性&#xff0c;为所有的原始类型&#xff08;boolean类型除外&#xf…

Hive的metastore服务的两种运行模式

Hive的metastore服务的作用是为Hive CLI或者Hiveserver2提供元数据访问接口 1.metastore运行模式 metastore有两种运行模式&#xff0c;分别为嵌入式模式和独立服务模式。下面分别对两种模式进行说明&#xff1a; &#xff08;1&#xff09;嵌入式模式 &#xff08;2&#x…

基于springboot + vue在线考试系统

qq&#xff08;2829419543&#xff09;获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;springboot 前端&#xff1a;采用vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xf…

【PID学习笔记 5 】控制系统的性能指标之一

写在前面 PID在实际工程中最重要的工作就是调参&#xff0c;那么首先就要了解控制系统的性能指标。上文最后简要介绍了控制系统的基本要求&#xff0c;本文开始将系统学习控制系统的性能指标&#xff0c;内容比较多&#xff0c;初步计划是分三节来讲解。本文重点介绍性能指标的…

Bishop新著 - 深度学习:基础与概念 - 前言

译者的话 十几年前&#xff0c;笔者在MSRA实习的时候&#xff0c;就接触到了Christopher M, Bishop的经典巨著《Pattern Recogition and Machine Learning》(一般大家简称为PRML)。Bishop大神是微软剑桥研究院实验室主任&#xff0c;物理出身&#xff0c;对机器学习的基本概念…

银行固定资产巡检管理盘点解决方案

随着金融业务的拓展&#xff0c;银行对办公设备、电子设备等固定资产的需求不断增加&#xff0c;因此&#xff0c;固定资产投入和资产生命周期的管理变得日益重要&#xff0c;由于管理体制、制度等因素不完全协调同步&#xff0c;银行在固定资产投入及管理方面面临诸多问题。 …

优雅草蜻蜓I即时通讯·水银版私有化部署之java服务端搭建教程-01

目录 前言1 1 安装 mongodb2 2 安装 redis3 3. 安装jdk3 4 解压 spring-boot-imapi3 5.开始安装 消息队列组件 rocket4 6. 安装推送服务5 7. 安装 message-push5 8. 安装uplooad 服务5 9&#xff1a; 安装nginx 服务7 1.不需要SSL7 2.需要SSL7 五&#xff1a;编译…

数字图像处理(实践篇)十八 人脸检测

目录 一 使用opencv进行人脸检测 二 使用face_recognition进行人脸检测 一 使用opencv进行人脸检测 1 haarcascade_frontalface_default.xml 方法① 下载 地址&#xff1a;https://github.com/opencv/opencv/tree/master/data/haarcascades 点击haarcascade_frontalface_d…

Java零基础——RocketMQ篇

1.RocketMQ简介 官网&#xff1a; http://rocketmq.apache.org/ RocketMQ是阿里巴巴2016年MQ中间件&#xff0c;使用Java语言开发&#xff0c;RocketMQ 是一款开源的分布式消息系统&#xff0c;基于高可用分布式集群技术&#xff0c;提供低延时的、高可靠的消息发布与订阅服…

Cyanine7-NHS ester荧光染料的化学结构、光谱性质和荧光特性

Cyanine7-NHS ester的结构包括一个靛菁环结构和一个NHS ester活性基团。NHS ester官能团是一种活化基团&#xff0c;用于将染料共价结合到含有游离氨基官能团的生物分子上。 **光谱性质&#xff1a;**Cyanine7-NHS ester的光谱性质通常包括&#xff1a; **激发波长&#xff08…

如何利用MES系统加强对仓库的管理

相比于ERP对库存数量的统计查看&#xff0c;MES系统对于仓库的管理则更加具体。在这个快速变革的时代&#xff0c;仓库管理对于企业的运营效率和客户满意度至关重要&#xff0c;单靠ERP系统已经很难应对新的挑战&#xff0c;所以为了提高仓库管理的效率和准确性&#xff0c;许多…

Twincat功能块使用经验总结

控制全局变量&#xff1a; //轴控制指令 bi_Power: BOOL; //使能 bi_Reset: BOOL; //复位 bi_Stop: BOOL; //停止 bi_JogForward: BOOL; //正向点动 bi_JogBackwards: BOOL; //反向点动 bi_MoveAdditive: BOOL; //增量位…

Java 数据结构篇-二叉树的深度优先遍历(实现:递归方式、非递归方式)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 二叉树的说明 1.1 二叉树的实现 2.0 二叉树的优先遍历说明 3.0 用递归方式实现二叉树遍历 3.1 用递归方式实现遍历 - 前序遍历 3.2 用递归方式实现遍历 - 中序遍…

RabbitMq整合Springboot超全实战案例+图文演示+源码自取

目录 介绍 简单整合 简单模式 定义 代码示例 work模式 定义 代码示例 pubsub模式 定义 代码示例 routing模式 定义 代码示例 top模式 定义 代码 下单付款加积分示例 介绍 代码 可靠性投递示例 介绍 代码 交换机投递确认回调 队列投递确认回调 ​延迟消…

创作涌动·CSDN·21天创作挑战赛·第三期,正式开启报名!

​ 文章目录 ⭐️ 活动介绍⭐️ 活动详情⭐️ 活动奖品⭐️ 活动流程⭐️ 评审规则⭐️ 报名&投稿事项⭐️ 关于活动组织 活动报名地址&#xff08;点击跳转&#xff09; 本次活动与官方活动及其他博主的创作型活动并不不冲突&#xff01; ⭐️ 活动介绍 亲爱的小伙伴们&a…