您的位置:首页 > 新闻 > 资讯 > 前端生成验证码

前端生成验证码

2025/7/17 1:07:05 来源:https://blog.csdn.net/m0_62785037/article/details/141464629  浏览:    关键词:前端生成验证码

一.效果图

二、实现

2.1html

<template><div class="outer-box"><div class="code-box"><div class="inout-code"><label class="label" for="inputCode">验证码:</label><input type="text" v-model="inputCode" id="inputCode" /></div><div class="code-show" @click.prevent="generateCode"><canvas ref="canvas" width="100" height="40"></canvas></div></div><input type="button" value="确定" @click="checkCode" /></div>
</template>

2.2js

// 定义响应式变量
const canvas = ref(null);
const code = ref('');
const inputCode = ref('');// 生成验证码的函数
const generateCode = () => {const characters = 'qwertyuiopasdfghjklzxcvbnm123456789';code.value = Array.from({ length: 4 }, () => characters.charAt(Math.floor(Math.random() * characters.length))).join('');drawCode();
};// 将验证码绘制到 canvas 上
const drawCode = () => {const ctx = canvas.value.getContext('2d');ctx.clearRect(0, 0, canvas.value.width, canvas.value.height);// 绘制背景ctx.fillStyle = '#9d2e2e';ctx.fillRect(0, 0, canvas.value.width, canvas.value.height);// 设置字体样式ctx.font = '24px Arial';ctx.textAlign = 'center';ctx.textBaseline = 'middle';// 绘制验证码字符code.value.split('').forEach((char, index) => {ctx.fillStyle = `#${Math.floor(Math.random() * 16777215).toString(16)}`;ctx.fillText(char, (canvas.value.width / 5) * (index + 1), canvas.value.height / 2);});
};// 初始化验证码
const initCode = () => {nextTick(generateCode);
};// 校验输入的验证码
const checkCode = () => {if (code.value.toLowerCase() !== inputCode.value.toLowerCase()) {alert('您输入的验证码不正确');inputCode.value = '';generateCode(); // 重新生成验证码} else {alert('验证码正确');}
};// 组件挂载时生成验证码
onMounted(initCode);

2.3style

<style scoped>
.code-box{display: flex;gap: 10px;align-items: center;
}
</style>

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com