今天做项目需要这个(随机卡号16位(大写+数字))

luoxudong121316 2010-11-20 08:55:03
哪位朋友帮忙解决一下,我只能写出下面这些,但是这个出现字符的概率远大于出现数字的概率
Random random = new Random();
String sRand = "";
for (int i = 0; i < 16; i++) {
int snum = -1;
while(!((snum >= 0 && snum <= 9) || (snum >= 'A' && snum <= 'Z'))){
snum = random.nextInt(100);
if(snum >= 0 && snum <= 9)
break;
}
System.out.println(snum);
if(snum>=0&&snum<=9){
System.out.println(snum+"0~9");
sRand+=snum;
}else{
System.out.println(snum+"A~Z");
sRand += (char)snum;
}
}
System.out.println(sRand.length());
}
...全文
158 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
caofaping 2010-11-21
  • 打赏
  • 举报
回复
简单点的就是一个数组,random随机取呗!
luoxudong121316 2010-11-21
  • 打赏
  • 举报
回复
谢谢大家,我的结贴率怎么变成75%了,我每个帖子都有结啊
  • 打赏
  • 举报
回复
使用apache 的 commons-lang.jar包中的RandomStringUtils类,下面的代码是生成10个16位的大写字母和数字的随机码。

可以到
http://commons.apache.org/lang/download_lang.cgi
上下载commnas-lang.jar包


RandomStringUtils su = new RandomStringUtils();
//生成10个大写字母和数字混合的16位随机码
for (int i = 0; i < 20; i++) {
System.out.println(su.random(16, "ABCDEFGHIJKLMNOPQRSTUVWSYZ0123456789"));
}


另外,如果出现字母的几率远大于出现数字的几率是非常正常的,因为,有26个大写字母,10个数字,随机出现,你说出现谁的概率大?

另外,希望楼主的结帖率提高,呵呵
plusplus2010 2010-11-21
  • 打赏
  • 举报
回复

if (random.nextBoolean()) {
随机取字母
} else {
随机取数字
}
习惯了忘记 2010-11-20
  • 打赏
  • 举报
回复
定义两个字符串数组 一个放英文A-Z 另一个放数字0-9 然后随机从两个里面取,最后两个随机取出的相加
luoxudong121316 2010-11-20
  • 打赏
  • 举报
回复
可是数字超过9就要怎么处理
majy 2010-11-20
  • 打赏
  • 举报
回复
数字只有10个,字母有26个,这本身就是不成比例啊

你在算法中想办法把这个平衡起来,比如,数字的区间是0-26,然后取尾数,这个问题就解决了

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧