实现短信验证码的发送[JAVA]

一、基础知识补充

1、编码

常见的编码:UTF-8 GBK Unicode GB2312 、、、
在这里插入图片描述 编码有什么用呢?相信大家在编程程序的时候,经常出现乱码的情况,而这就是编译环境中的编码与当前的文字编码不同,从而导致的。那么出现这种情况该如何解决呢?这里提供两种思路,如果遇到这种情况,大家自行进行修改。

1、通过设置,从而设置该编写工具的编译环境。
2、通过代码对内容进行编码,从而达到满足当前环境的标准
个人小tip

建议不要动编译环境中的编码设置,除非当前满足真的无法满足项目的绝大多数编码情况。尽量使用代码进行转化)

代码实现
假设我们这里需要将文字转化为 UTF-8,可以通过这样的编程实现其编码的实现
String pare = URLEncoder.encode("你好","UTF-8");

2、URL

【菜鸟教程】对URL的定义:

URL(Uniform Resource Locator)中文名为统一资源定位符,有时也被俗称为网页地址。表示为互联网上的资源,如网页或者FTP地址。

其实URL可以分为以下几个部分:
1、协议为(protocol):http
2、主机为(host:port):www.runoob.com
3、端口号为(port): 80 ,以上URL实例并未指定端口,因为 HTTP 协议默认的端口号为 80。
4、文件路径为(path):/index.html
5、请求参数(query):language=cn
6、 定位位置(fragment):j2se,定位到网页中 id 属性为 j2se 的 HTML 元素位置 。

比如:http://www.runoob.com/index?language=cn#j2se

java.net包中定义了URL类,我们使用该类用来处理有关URL的内容。同时java.net.URL提供了丰富的URL构建方式,并可以通过java.net.URL来获取资源。

URL url = new URL("https://api.jisuapi.com/sms/send?appkey=62958a3a6ef3c56d&mobile=电话号码&content="+content);

要实现短信验证功能,这里我们需要短信的发送AIP:https://api.jisuapi.com/sms/send【此API已失效】这里给出其相关参数与短信API,只是提供供学习。
在这里插入图片描述

3、字节流与字符流

字节流

字节流就是在读取的时候,读到一个字节就返回一个字节。字节流处理单元为 1 个字 节,分别有操作字节和字节数组。字节流可以处理所有类型数据,如:MP3AVI视频文件、图片、歌曲使用字节流就比较好。字节流主要是操作 byte类型数据,以 byte数组为准。

主要操作类就是OutputStream,InputStream

    import java.io.File;    
    import java.io.FileWriter;    
    import java.io.Writer;    
    public class WriterDemo {   
    	// 异常抛出,不处理     
        public static void main(String[] args) throws Exception { 
            // 第1步:使用File类找到一个文件
            // 声明File 对象        
            File f = new File("d:" + File.separator + "txt.txt");
            // 第2步:准备好一个输出的对象 通过子类实例化父类对象    
            Writer out = null;                 
    		// 通过对象多态性进行实例化      
            out = new FileWriter(f);            
            // 第3步:准备一个字符串   
            String str = "Hello World!!!";      
    		// 进行写操作   
            out.write(str);                    
    		// 将内容输出    
            // 第4步:关闭输出流(此时没有关闭)
            out.close();
            //如果不关闭字节流,那么一样可以获取文本中的数据,因为它没有缓冲区              
        }    
    }   
字符流

字符流处理的单元为 2 个字节的 Unicode字符,分别有操作字符、字符数组或字符串,所以字符流是由 Java虚拟机将字节转化为 2 个字节的 Unicode字符为单位的字符而成的, 所以它对多国语言支持性比较好!如果是关系到中文(文本)的,用字符流好点。在程序中一个字符等于两个字节,只要是处理纯文本数据,就要优先考虑使用字符流,除此之外都用字节流。同时字符流使用了字节流读到一个或多个字节(中文对应的字节数是两个,在 UTF-8码表中是 3 个字节)时,会先去查指定的编码表,将查到的字符返回。字符流使用了缓冲区,而字节流没有使用缓冲区,如果当在操作字符流时,没有关闭字符流,那么数据将放在缓冲区无法读取出来。需要关闭之后才能获取数据。

java提供了 ReaderWriter两个专门操作字符流的类。

    import java.io.File;    
    import java.io.FileWriter;    
    import java.io.Writer;    
    public class WriterDemo04 {    
    	// 异常抛出不处理   
        public static void main(String[] args) throws Exception {  
            // 第1步:使用File类找到一个文件    
            // 声明File对象    
            File f = new File("d:" + File.separator + "test.txt");
            // 第2步:准备好一个输出的对象  通过子类实例化父类对象    
            Writer out = null;                   
    		// 通过对象多态性进行实例化
            out = new FileWriter(f); 
            // 第3步:准备一个字符串    
            String str = "Hello World!!!";      
    		// 进行写操作
            out.write(str);                    
    		// 将内容输出    
            out.flush();                       
    		// 强制性清空缓冲区中的内容    
            // 第4步:关闭输出流
            out.close();
            //如果不关闭字符流,那么缓冲区中的数据无法获取到                 
        }    
    }   

二、短信验证码编程实现

package test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;

public class test{
    public static void main(String[] args) throws IOException{
        // 实现步骤
        // 1、将中文参数转换为编码进行处理
        //此处根据各自开通的短信API的content内容进行填写
        String pare = URLEncoder.encode("恭喜你,短信发送成功!验证码是:666666 。如非本人操作,请忽略本短信!","UTF-8");
        // 2、创建一个URL类的对象
        //根据各自开通的短信API进行填写此处的API URL
        URL url = new URL("https://api.jisuapi.com/sms/send?appkey=62958a3a6ef3a56d&mobile=电话号码&content="+pare);
        // 3、通过URL类的队长url的打开网络连接的功能,来打开网络连接
        // 并得到一个URLConnection连接的对象 conn
        URLConnection conn = url.openConnection();
        // 4、通过连接对象conn,得到用于读取网页内容的字节流is,
        InputStream is = conn.getInputStream();
        //5、将上述的字节流is,装饰为字符输入流,将字符输入流再装饰为带有缓冲功能,能一次读取一行的字符输入流br
        BufferedReader br = new BufferedReader(new InputStreamReader(is,"UTF-8"));
        // 6、通过字符输入流br,读取一行数据,并将内容赋值给变量text
        String text = br.readLine();
        // 7、将读取到的内容,展示到控制台
        System.out.print(text);
    }
}

【实现结果】
在这里插入图片描述在这里插入图片描述

如果觉得不错,希望能点赞支持,让小Yang动力满满继续写出好文章。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要实现短信验证码登录,需要以下步骤: 1. 用户输入手机号码,点击发送验证码按钮,后台服务向该手机号码发送验证码短信。 2. 用户输入收到的短信验证码,点击登录按钮。 3. 后台服务验证手机号码和短信验证码是否匹配,如果匹配则登录成功,否则登录失败。 以下是使用 Java 实现短信验证码登录的示例代码: ``` // 生成随机的验证码 String code = String.valueOf((int)((Math.random()*9+1)*100000)); // 将验证码存储到缓存中,这里使用了 Redis 缓存,可以根据自己的情况选择合适的缓存方式 redisTemplate.opsForValue().set("sms_" + phone, code, 5, TimeUnit.MINUTES); // 发送短信验证码 sendSms(phone, code); ``` ``` // 根据手机号码和验证码判断是否可以登录 String cacheCode = redisTemplate.opsForValue().get("sms_" + phone); if (!code.equals(cacheCode)) { // 验证码不正确 return "验证码不正确,请重新输入"; } // 验证码正确,进行登录操作 User user = userService.loginByPhone(phone); if (user == null) { // 用户不存在 return "用户不存在,请先注册"; } // 将用户信息存储到 session 中 session.setAttribute("user", user); return "登录成功"; ``` 需要注意的是,发送短信验证码和验证短信验证码是否正确的具体实现方式需要根据所使用的短信服务提供商进行调整。 ### 回答2: 要实现短信验证码登录功能,可以使用Java编程语言结合第三方短信服务提供商的API来实现。 首先,我们需要调用短信服务提供商的API接口来发送验证码短信。根据短信服务商的不同,发送短信的方式也有所差异,但一般来说,我们需要提供手机号码、短信内容和发送者等信息,并通过请求发送短信。 接下来,用户输入手机号码和接收到的短信验证码后,我们需要验证验证码的有效性。可以通过与短信服务提供商的接口进行对比来验证验证码是否有效。一般来说,我们会将接收到的手机号码和验证码一同传递给短信服务商的API,并获取返回结果。如果验证码有效,我们可以继续进行登录操作;如果验证码无效,可能需要重新发送验证码或提示用户验证码有误。 在登录操作时,可以使用Java中的HttpURLConnection或HttpClient等工具来发送带有手机号码和验证码的登录请求到后台服务器。后台服务器接收到登录请求后,可以再次验证手机号码和验证码,并对用户进行身份认证。如果验证成功,可以返回登录成功的响应;如果验证失败,可以返回登录失败的响应。 总结起来,实现短信验证码登录需要以下步骤: 1. 调用短信服务提供商的API发送验证码短信; 2. 用户输入手机号码和接收到的短信验证码; 3. 验证验证码的有效性; 4. 发送带有手机号码和验证码的登录请求到后台服务器; 5. 后台服务器通过验证手机号码和验证码,并进行身份认证; 6. 返回登录结果给客户端。 以上就是用Java实现短信验证码登录的大致过程。具体实现过程中,还需要考虑异常处理、请求参数的加密与解密、接口调用频率限制等问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值