在Java中生成8位OTP

问题描述 投票:1回答:5

用Java生成8位OTP,第一位为零。我已经尝试过用Java中的Math()函数,但是它会给随机数的第一位数字提供零。建议我最简单的方法来实现相同目的

java android
5个回答
2
投票

您可以使用DecimalFormat类将OTP中的格式固定为零。请参考以下网址https://stackoverflow.com/a/57584904/3405508

在格式构造函数中添加8个零。


2
投票

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

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

2
投票
String otp = String.format("%08d", new SecureRandom().nextInt(100_000_000));

一个需要String类型,因为整数值不具有用左填充零填充宽度的概念。

[SecureRandom最好先生成一个种子来完成。

如果您确实总是希望前面有一个0(即我所解释的,您想用零填充左填充),请使用10_000_000表示7位数字。


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();

0
投票

您可以尝试以下操作。取得长度为char8数组。将数组的第一个元素分配为0,并使用循环为其余元素分配随机数。

public static String  generateOtp() { 
    Random rnd = new Random();
    char [] digits = new char[8];
    digits[0] = '0'; // If first digit always be 0
    for(int i=1; i<digits.length; i++) {
       digits[i] = (char) (rnd.nextInt(10) + '0');
    }
    return new String(digits);
}

样本输出:

02931707
© www.soinside.com 2019 - 2024. All rights reserved.