一个简单的本地验证码生成工具

        一般在前端或者移动端生成一个图形验证码需要创建一个图片,现在大多数都由后台生成,调用接口得到返回的图片url直接放上去,再把用户输入的验证码提交给后台,由后台判断验证码是否正确。如果仅仅为了防止用户频繁操作,本地生成一个就行,我这里就讲一个简单的模拟生成,不包含汉字的。

        首先考虑目的,一个图片(可以是drawable,可以是bitmap),一个验证码code(一个字符串),那就先生成随机的验证码code,生成code的方式很多,可以用java的正则表达式,也可以自定义,我这里就讲一个自定义的:创建一个char数组,从中取4个或者6个出来随机排列,代码如下——

 

到这里验证码就生成出来了,由createCode()方法即可得到,codeLength为验证码的长度,可以自行设置。

        然后就是考虑图片了,首先设置好图片的宽高,比如宽110dp,高48dp,那么创建的bitmap就是 val bp = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888),得到bitmap之后创建它的画布,在画布上需要把验证码以不规则的排列画上去,所以给每个字符随机的padding,但是又不能超出范围,所以就小范围内随机:

我这里定的值是10和15,其实可以自己计算一下,字体的大小,以及画布的宽高,就可以定出范围了。在画每个验证码字符的时候随机一下颜色,是否加粗,倾斜度等:

 之前我考虑的是给每个字符加干扰线(下划线和删除线),后面优化了一下,在画布上直接画整体的干扰线:

至于画多少条也由自己定,再给画布一个背景c.drawColor(Color.parseColor("#cfeef5")),至此一个简易的图形验证码就生成完毕了。在调用的时候把生成的bitmap设置给ImageView,利用生成的code和用户输入的内容作比较,如果是要忽略大小写,那就全都转成小写或者大写来比较即可。

        有没有需要完整代码的呢?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值