【后端】短信验证码4位或6位

方法一 数字+小写字母 4/6位

UUID.randomUUID().toString().replaceAll("-","").subString(0,4); 
要六位就0~6

方法二 全数字4/6位

第一种

    public static void main(String[] args) {
        // 方法1
        StringBuilder builder = new StringBuilder();
        Random random = new Random();
        for (int i = 0; i < 6; i++) {
            builder.append(random.nextInt(10));
        }
        return builder.toString();
    }

第二种

public static void main(String[] args) {
    // 方法2 不太安全,可能出现126391.44721067968这样的
    String verifyCode
        = String. valueOf ((int) (Math.random () *900000 + 100000));
    System.out.println (verifyCode) ;
}

方法三 随机4/6位 数字+字母(包括大小写)

//定义一个生成随机四位验证码的方法
    public static String hello() {
        //定义一个字符数组,存放大小写字母以及0-9数字
        char[] ch = new char[62];
        int index = 0;
        //存放0-9
        for(int i = 48;i<=57;i++) {
            ch[index] = (char)(i);
            index++;
        }
        //存放大写字母
        for(int i = 65;i<=90;i++) {
            ch[index] = (char)(i);
            index++;
        }
        //存放小写字母
        for(int i = 97;i<=122;i++) {
            ch[index] = (char)(i);
            index++;
        }

        //定义一个空字符串,用于拼接随机字符
        String str ="";

        //生成四个随机字符(如果要造6位就把4改成6就好了)
        for(int i = 0; i < 4 ;i++) {
            char c = ch[new Random().nextInt(ch.length)];
            str = str + c;
        }

        //返回随机字符串
        return str;
    }
}

其他

四位数的验证码(带zip源码)

JAVA生成四位数的验证码_weixin_34015336的博客-CSDN博客

四位数验证码图画

java生成四位数字验证码_简单的随机生成4个数字验证码的实现_矢锋的博客-CSDN博客

关于文中用到的方法

random.nextInt()

// 会随机生成一个整数,这个整数的范围就是int类型的
// 范围在-2^31 ~ 2^31-1,但是如果在nextInt()括号中加入一个整数a,
// 那么这个随机生成的随机数范围就变成[0,a)。

Random的nextInt()用法_rothschildlhl的博客-CSDN博客_nextint()

已删除的方法

    public static void main(String[] args) {
        Long codeL= System.nanoTime();
        String codeStr = Long.toString(codeL);
        String verifyCode1
                = codeStr.substring(codeStr.length() - 6);
                // 由于一共有16位,那么substring(10)就是从第10位开始数到最后,
                // 那就是取索引10 11 12 13 14 15上的一共六位数字刚好

        System.out.println(verifyCode1);
    }
不再使用的理由 : 问题是产生的随机结果带很多个0, 比如780000 131700这样的 , 243200 ,也试过codeStr.substring(4,codeStr.length()-6);这样
​​​​​​​但是会导致结果很僵硬,可能获取好几次验证码只有一个数字的差别甚至毫无差别,不太好

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
后端处理验证码通常涉及到几个技术层面: 1. **生成验证码**:后端需要生成验证码图片,这通常会使用一些图形处理库,例如Java中的`Graphics`类或者第三方库如`java.awt`和`javax.imageio`。对于图形验证码,生成时会涉及到随机字符的选取、图形的绘制和噪声的添加等步骤。 2. **存储验证码**:为了验证用户提交的验证码是否正确,后端需要临时存储这个值。一般会将验证码存储在内存中,比如使用`ConcurrentHashMap`这样的数据结构,以便快速检索。此外,为了防止重复提交,还可能需要设置验证码的过期时间。 3. **发送验证码**:对于短信验证码或者邮件验证码后端需要与短信服务商或者邮件服务提供商的API进行交互。这通常涉及到HTTP请求的发送和接收,可能会使用`HttpClient`或者`RestTemplate`(Java中的库)等进行网络通信。 4. **验证机制**:当用户提交验证码时,后端需要对验证码进行验证。这通常涉及到解码用户输入的验证码,然后与存储在内存或者数据库中的原始验证码进行比对。 5. **安全性**:验证码的设计往往还需要考虑到安全性问题,如防止自动化攻击(使用了验证码依然被绕过)、限制请求频率(防止暴力破解)等。这可能需要在后端实现额外的安全机制,如令牌机制(Token)、IP限流等。 技术栈举例: - 编程语言Java、Python、Node.js等。 - 图形处理库:Java AWT、PIL(Python Imaging Library)、sharp(Node.js图像处理库)等。 - 网络通信:OkHttp(Java)、requests(Python)、axios(Node.js)等。 - 数据库:MySQL、PostgreSQL、MongoDB等,用于存储需要较长时间验证的验证码,如注册、找回密码等场景。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值