【问题标题】:Generate 8 digit OTP in java [duplicate]在java中生成8位OTP [重复]
【发布时间】:2020-02-19 10:55:58
【问题描述】:

在java中生成8位OTP,第一位为零。 我尝试过在 Java 中使用 Math() 函数,但它给出了随机数的第一个数字而不是零。 建议我一个最简单的方法来实现同样的目标

【问题讨论】:

  • 生成一个 7 位数字并添加一个零作为第一个数字(标准 Java 中没有 Math() 函数)
  • 如果您将零添加为第一个字母,则很难保持长度。使用格式,您可以做到这一点。
  • @Martijn Pieters 我有一个 8 位 OTP 的请求,第一个数字是 0。即使它被标记为重复
  • @YogeshivuN 您将答案标记为已接受,除了指向另一个问题之外什么也没做。 您和您的同事一起制作了此副本

标签: java android


【解决方案1】:

您应该使用SecureRandom。参考https://stackoverflow.com/a/11052736/1776132

String.format("%08d", new SecureRandom().nextInt(10_000_000))

【讨论】:

    【解决方案2】:
    static final LENGHT = 8;
    
    Random randomizer = new Random();
    StringBuilder builder = new StringBuilder();
    for(i = 0; i <= LENGHT; i++) {
       builder.append(randomizer.nextInt(10));
    }
    
    String otp = builder.toString();
    

    编辑

    正如 Smile 所说,使用 SecureRandom 会是更好的选择。

    static final LENGHT = 8;
    
    SecureRandom randomizer = new SecureRandom();
    StringBuilder builder = new StringBuilder();
    for(i = 0; i <= LENGHT; i++) {
       builder.append(randomizer.nextInt(10));
    }
    
    String otp = builder.toString();
    

    如果您希望第一个数字始终为零;

    static final LENGHT = 7;
    
    SecureRandom randomizer = new SecureRandom();
    StringBuilder builder = new StringBuilder("0");
    for(i = 0; i <= LENGHT; i++) {
       builder.append(randomizer.nextInt(10));
    }
    
    String otp = builder.toString();
    

    【讨论】:

      猜你喜欢
      • 2017-03-15
      • 1970-01-01
      • 1970-01-01
      • 2016-04-07
      • 2012-12-02
      • 2015-10-21
      • 1970-01-01
      • 1970-01-01
      • 2018-07-27
      相关资源
      最近更新 更多