auth code(验证码)为唯一的16位数字串,声明成什么类型比较好呢?如何让它随机的显示?
4条回答
- wanghaolovezlq 2010-03-26 17:26关注
例子代码
Java提供的随机数工具,或者第三方提供的随机数工具,都不能满足我的需求:产生指定位数且大于0的整数(可以做为ID使用)。
在使用commons-lang的RandomStringUtils类时,有一个方法引起了我的注意RandomStringUtils.randomNumeric(int count),该方法返回指定数目的随机数字串,如果把返回的数字串解析成数字,不就可以产生随机数了么~~~~
Java代码
package org.lazyman.util
import org.apache.commons.lang.RandomStringUtils;
import org.apache.commons.lang.math.RandomUtils;
/**- @author yihuan
-
@version RandomNumberUtil.java 2010-1-14 上午11:39:20
*/
public class RandomNumberUtil {private static final int[] prefix = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
/**
- 随机产生最大为18位的long型数据(long型数据的最大值是9223372036854775807,共有19位)
- @param digit
- 用户指定随机数据的位数
*/
public static long randomLong(int digit) {
if (digit >= 19 || digit <= 0)
throw new IllegalArgumentException("digit should between 1 and 18(1<=digit<=18)");
String s = RandomStringUtils.randomNumeric(digit - 1);
return Long.parseLong(getPrefix() + s);
}
/**
- 随机产生在指定位数之间的long型数据,位数包括两边的值,minDigit<=maxDigit
- @param minDigit
- 用户指定随机数据的最小位数 minDigit>=1
- @param maxDigit
- 用户指定随机数据的最大位数 maxDigit<=18
*/
public static long randomLong(int minDigit, int maxDigit) {
if (minDigit > maxDigit) {
throw new IllegalArgumentException("minDigit > maxDigit");
}
if (minDigit <= 0 || maxDigit >= 19) {
throw new IllegalArgumentException("minDigit <=0 || maxDigit>=19");
}
return randomLong(minDigit + getDigit(maxDigit - minDigit));
}
private static int getDigit(int max) {
return RandomUtils.nextInt(max + 1);
}/**
- 保证第一位不是零
- @return
*/
private static String getPrefix() {
return prefix[RandomUtils.nextInt(9)] + "";
}
}
- 随机产生最大为18位的long型数据(long型数据的最大值是9223372036854775807,共有19位)
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 - @author yihuan
悬赏问题
- ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
- ¥15 数据可视化Python
- ¥15 要给毕业设计添加扫码登录的功能!!有偿
- ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
- ¥15 微信公众号自制会员卡没有收款渠道啊
- ¥15 stable diffusion
- ¥100 Jenkins自动化部署—悬赏100元
- ¥15 关于#python#的问题:求帮写python代码
- ¥20 MATLAB画图图形出现上下震荡的线条
- ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘