用Java生成8位OTP,第一位为零。我已经尝试过用Java中的Math()
函数,但是它会给随机数的第一位数字提供零。建议我最简单的方法来实现相同目的
您可以使用DecimalFormat类将OTP中的格式固定为零。请参考以下网址https://stackoverflow.com/a/57584904/3405508
在格式构造函数中添加8个零。
您应该使用SecureRandom
。请参阅https://stackoverflow.com/a/11052736/1776132
String.format("%08d", new SecureRandom().nextInt(10_000_000))
String otp = String.format("%08d", new SecureRandom().nextInt(100_000_000));
一个需要String类型,因为整数值不具有用左填充零填充宽度的概念。
[SecureRandom最好先生成一个种子来完成。
如果您确实总是希望前面有一个0(即我所解释的,您想用零填充左填充),请使用10_000_000表示7位数字。
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();
您可以尝试以下操作。取得长度为char
的8
数组。将数组的第一个元素分配为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