JAVA手机验证码的生成简单实现
public String generator(String tele){//利用哈希值生成验证码int hash =tele.hashCode();//加密int encryption= 2020666;//用hash异或上加密得到生成第一次加密结果//这个生成的加过永远是固定的如果加密码不动的情况下long result= hash ^ encryption;//利用获得当前时间再次加密得出结果long time = System.currentTimeMillis();result=result^time;//取后六位long code= result % 1000000;//此时随机验证码生成完成return code+"";}
首先我们传入一个手机号字符串tele,获取它的哈希值,在通过加密,用哈希值异或上加密我们就可以得到第一个加密的结果了,但是我们此时我们生成的验证码是不变的因为我们的加密值是一直不变的,然后在现实生活中我们的验证码是动态变化的这是如何做到的呢?
其实要做到生成动态的验证码并不难,我们只要让我们上次得到的验证码再和一个动态变化的数据进行加密即可。
此时我们最容易想到的就是时间。因此我们可以通过这串代码
long time = System.currentTimeMillis();result=result^time;
得到这个这个动态生成的验证码,然后对验证码进行取余就可以得到一个六位数的验证码了。
但此时你以为就结束了吗?
我们上述的代码会出现两个bug
当你在多次运行这串代码时你会发现验证码还会出现负数的形式,显然这不符合我们的实际生活
下面我们就来解决这个bug
其实也特别简单,我们只要进行一个判断就可以了
这里我们可以运用三目表达式进行正负值的判断
code=code<0? -code:code;
好了到这个如果按照我的代码运行还会发现,会出现验证码小于六位数的,出现这种错误并不是我们的代码出现错误,而是生成的验证码出现了000787,002323,000001这种情况
此时我们就要运用一些数据结构相关的知识和一点小算法
//解决思路利用数据结构的算法,利用数组,将得到的验证码长度作为数组的角码,在拼接字符就可以完成补零//先把得到的验证码变成字符串String codeStr=code+"";//再把code的字符长度取出,作为数组的角标int len=codeStr.length();String[] patch ={"000000","00000","0000","000","00","0",""};//验证有多少为需要补String patch1 = patch[len];return patch1+codeStr;
好了到这里我们基本完成了手机号验证码的生成。
完整代码给你
public String generator(String tele){//利用哈希值生成验证码int hash =tele.hashCode();//加密int encryption= 2020666;//用hash异或上加密得到生成第一次加密结果//这个生成的加过永远是固定的如果加密码不动的情况下long result= hash ^ encryption;//利用获得当前时间再次加密得出结果long time = System.currentTimeMillis();result=result^time;//取后六位long code= result % 1000000;//此时随机验证码生成完成//此时会出现生成的验证码为负值,利用三目表达式进行解决code=code<0? -code:code;//此时还会出现第二个问题当生成000656这种只会显示656不会补零所以我们现在要解决当位数不够在前补零//解决思路利用数据结构的算法,利用数组,将得到的验证码长度作为数组的角码,在拼接字符就可以完成补零//先把得到的验证码变成字符串String codeStr=code+"";//再把code的字符长度取出,作为数组的角标int len=codeStr.length();String[] patch ={"000000","00000","0000","000","00","0",""};//验证有多少为需要补String patch1 = patch[len];return patch1+codeStr;}
在接下来的文章中我会就如何利用缓存实现验证码的生成和校验的功能;
如果感兴趣可以关注我,同时也可以和我进行交流。
JAVA手机验证码的生成简单实现相关推荐
- java手机验证码登陆_在Web项目中手机短信验证码实现的全过程记录
这篇文章主要给大家介绍了关于在Web项目中实现短信验证码的全过程记录,文中通过示例代码介绍的非常详细,在文末跟大家提供了源码下载,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧. 前言 最近在做 ...
- java 手机验证码
需要一个做批量转账的功能,为了账户安全,执行该操作前需要向指定手机号码发送验证码,验证码一致才可以进行之后的操作 jsp页面: <th>获取手机验证码:</th><td& ...
- java手机验证码代码_发送手机验证码
[java]代码库/** * * @包名 :com.feel.common.util * @文件名 :SendMobileRand.java * TODO 类作用:发送手机验证码 * @系统名称 : ...
- Java调用WebService接口实现发送手机短信验证码功能,java 手机验证码,WebService接口调用...
近来由于项目需要,需要用到手机短信验证码的功能,其中最主要的是用到了第三方提供的短信平台接口WebService客户端接口,下面我把我在项目中用到的记录一下,以便给大家提供个思路,由于本人的文采有限, ...
- java手机验证码登录代码_java web实现手机短信验证码登录实例
运行环境 jdk7+tomcat7 项目技术(必填) Servlet+Ajax+Bootstrap 数据库文件 我这里没用到数据库,比较简单,如果需要用到数据库不会的话可以私信我或者加我QQ jar包 ...
- java手机验证码代码_手机验证码(Java代码)
首先就是导入相关的jar包,这里用maven依赖: com.alibaba fastjson 1.2.54 创建发送验证码的类: package com.snm.util; import java.i ...
- 多因素身份认证 (MFA) 插件:手机验证码认证因素配置流程
功能介绍 对用户表扩展手机号码字段,允许用户通过手机号码与验证码的方式进行认证,注册,重置密码以及更换手机号. 多因素身份认证 (MFA) 是保护企业 IT 资源访问安全的一种关键工具,也是零信任安全 ...
- 验证码的生成及简单效果展示(Java篇)
验证码的生成及简单效果展示 前言 一.验证码的生成 1,验证码生成的原理 2,验证码生成步骤 3,代码演示 二.验证码效果演示 1,前端代码展示 2,效果展示 总结 前言 提示:本文设计语言实现Jav ...
- Java实现手机验证码登录和SpringSecurity权限控制
手机验证码登录和SpringSecurity权限控制 手机快速登录功能,就是通过短信验证码的方式进行登录.这种方式相对于用户名密码登录方式,用户不需要记忆自己的密码,只需要通过输入手机号并获取验证码就 ...
最新文章
- 英特尔反驳质疑:芯片供应充足、10nm量产没问题
- jvm 的垃圾回收算法
- JavaScript类型总览(图)
- linux 关闭网络防火墙设置方法,CentOS Linux防火墙配置及关闭方法
- 五十二、Java连接Mysql数据库
- 计算机接口配件,最近发布:最新的计算机外部接口计算机主板外部接口简介计算机主板接口简介...
- Java中的LinkedList
- mysql用创建的用户登陆并修改表格_MySQL 基础学习二:创建一个用户表,并增删改查...
- Python之eval函数实例解释
- java调用打印机打印excel linux_手把手教你嵌入式Linux系统驱动hp1020打印机
- 因供应商遭不明网络攻击,丰田汽车宣布停产
- 如何编写优雅的代码:06. 设计模式应用案例(上)
- 利用Codejock创建TaskPanel(ToolBox) - 2
- html留言功能怎么实现,javascript实现留言板功能
- BusHound6.0.1安装包
- JS通过高德地图将经纬度转换为地理位置
- HTML期末作业-我的家乡网页作业
- 天池大数据比赛,菜鸟仓库比赛,御膳房操作
- 计算机开机其他用户,Win8.1系统下取消开机显示“其他用户”的方法
- CSDN聊ChatGPT