分享更有价值
被信任是一种快乐

react如何实现图片验证

文章页正文上

这篇文章主要介绍“react如何实现图片验证”,在日常操作中,相信很多人在react如何实现图片验证问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”react如何实现图片验证”的疑惑有所帮助!接下来,请跟着小编一起来学习吧! react实现图片验证的方法:1、打开相应的react文件;2、通过“randomNum = (min, max) => {…}”方法生成一个随机数;3、通过“drawLine(ctx) {…}”方法绘制干扰线;4、使用“randomCode() {…}”方法随机生成验证码即可。react实现图片验证码效果如图所示:

importReact,{Component}from'react'
import{Icon,Input,Form}from'antd';
classOperationalDataManagementextendsComponent{
state={
code:'',
codeLength:4,
fontSizeMin:20,
fontSizeMax:22,
backgroundColorMin:240,
backgroundColorMax:250,
colorMin:10,
colorMax:20,
lineColorMin:40,
lineColorMax:180,
contentWidth:96,
contentHeight:38,
showError:false,//默认不显示验证码的错误信息
}
componentWillMount(){
this.canvas=React.createRef()
}
componentDidMount(){
this.drawPic()
}
//生成一个随机数
//eslint-disable-next-linearrow-body-style
randomNum=(min,max)=>{
returnMath.floor(Math.random()*(max-min)+min)
}
drawPic=()=>{
this.randomCode()
}
//生成一个随机的颜色
//eslint-disable-next-linereact/sort-comp
randomColor(min,max){
constr=this.randomNum(min,max)
constg=this.randomNum(min,max)
constb=this.randomNum(min,max)
return`rgb(${r},${g},${b})`
}
drawText(ctx,txt,i){
ctx.fillStyle=this.randomColor(this.state.colorMin,this.state.colorMax)
constfontSize=this.randomNum(this.state.fontSizeMin,this.state.fontSizeMax)
ctx.font=fontSize+'pxSimHei'
constpadding=10;
constoffset=(this.state.contentWidth-40)/(this.state.code.length-1)
letx=padding;
if(i>0){
x=padding+(i*offset)
}
lety=this.randomNum(this.state.fontSizeMax,this.state.contentHeight-5)
if(fontSize>40){
y=40
}
constdeg=this.randomNum(-10,10)
//修改坐标原点和旋转角度
ctx.translate(x,y)
ctx.rotate(deg*Math.PI/180)
ctx.fillText(txt,0,0)
//恢复坐标原点和旋转角度
ctx.rotate(-deg*Math.PI/180)
ctx.translate(-x,-y)
}
drawLine(ctx){
//绘制干扰线
for(leti=0;i{
this.drawPic()
this.props.form.setFieldsValue({
sendcode:'',
});
}
//输入验证码
changeCode=e=>{
if(e.target.value.toLowerCase()!==''&&e.target.value.toLowerCase()!==this.state.code.toLowerCase()){
this.setSta免费云主机、域名te({
showError:true
})
}elseif(e.target.value.toLowerCase()===''){
this.setState({
showError:false
})
}elseif(e.target.value.toLowerCase()===this.state.code.toLowerCase()){
this.setState({
showError:false
})
}
}
//随机生成验证码
randomCode(){
letrandom=''
//去掉了IlioO,可自行添加
conststr='QWERTYUPLKJHGFDSAZXCVBNMqwertyupkjhgfdsazxcvbnm1234567890'
for(leti=0;i{
constcanvas=this.canvas.current;
constctx=canvas.getContext('2d')
ctx.textBaseline='bottom'
//绘制背景
ctx.fillStyle=this.randomColor(this.state.backgroundColorMin,this.state.backgroundColorMax)
ctx.fillRect(0,0,this.state.contentWidth,this.state.contentHeight)
//绘制文字
for(leti=0;i
{getFieldDecorator('sendcode',{ rules:[ {required:true,message:'请输入校验码!'}, { validator:(rule,value,callback)=>{ if(value){ if(value.toLowerCase()===this.state.code.toLowerCase()){ callback() this.setState({ sendcode:value, showError:false }) }else{ callback('请输入正确的验证码') this.setState({ showError:true }) } }else{ callback() } } } ], })( } onChange={this.changeCode} placeholder="请输入校验码" /> )}

相关推荐: jQuery性能优化的方法有哪些

今天小编给大家分享一下jQuery性能优化的方法有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、选择器性能优化建议1、总是从#id选择器…

文章页内容下
赞(0) 打赏
版权声明:本站采用知识共享、学习交流,不允许用于商业用途;文章由发布者自行承担一切责任,与本站无关。
文章页正文下
文章页评论上

云服务器、web空间可免费试用

宝塔面板主机、支持php,mysql等,SSL部署;安全高速企业专供99.999%稳定,另有高防主机、不限制内容等类型,具体可咨询QQ:360163164,Tel同微信:18905205712

主机选购导航云服务器试用

登录

找回密码

注册