随机6位纯数字不重复怎么做

时间:2021-03-14 11:17:23
生成随机的6位纯数字作为ID,
在后续生成过程中怎么保证尽量和已生成的不重复
没这方面的思路
8位也行

10 个解决方案

#1


<script>
        var arr = [];
        while (true) {
            var num = parseInt(Math.random()*100+1);
            if(arr.indexOf(num) == -1){
                arr[arr.length] = num;
            }
            if (arr.length>=6) {
                break;
            }
        }
        console.log(arr);
    </script>

#2


也可以引用生成当前时间的方法生成数字这个思路

#3


每次生成之后都用数组或哈希表之类的记录下来,下次生成时判断哈希表中是否有相同内容,有则重新生成数字并再次判断

#4


引用 1 楼 Bs__Q 的回复:
<script>
        var arr = [];
        while (true) {
            var num = parseInt(Math.random()*100+1);
            if(arr.indexOf(num) == -1){
                arr[arr.length] = num;
            }
            if (arr.length>=6) {
                break;
            }
        }
        console.log(arr);
    </script>




存在一个这样的问题,因为数据库放的6位数,后期生成新的数时都要和数据库数据库里的对比,效率很低

#5


引用 3 楼 jslang 的回复:
每次生成之后都用数组或哈希表之类的记录下来,下次生成时判断哈希表中是否有相同内容,有则重新生成数字并再次判断


我用了一个set集合存放数据库已有的随机数,然后往里添加一个新的随机数,判断如果size()变大了就证明生成的不是重复的,如果不是就重新生成,但这样效率很低,并且会莫名的卡死

#6


引用 4楼我是你的主体 的回复:
Quote: 引用 1 楼 Bs__Q 的回复:

<script>
        var arr = [];
        while (true) {
            var num = parseInt(Math.random()*100+1);
            if(arr.indexOf(num) == -1){
                arr[arr.length] = num;
            }
            if (arr.length>=6) {
                break;
            }
        }
        console.log(arr);
    </script>




存在一个这样的问题,因为数据库放的6位数,后期生成新的数时都要和数据库数据库里的对比,效率很低
受教,当时没想那么多 随机6位纯数字不重复怎么做

#7


楼主可以看看我写的博客
http://blog.csdn.net/qq_26106607/article/details/68289854

#8


先建个表
id自增,str_rnd为6位或者8位,往这个表里填充随机数字,例如10万个不重复的随机数字

要用的时候,顺序从这个表中取出str_rnd

#9


创建数组生成全部六位数,每次用提取一个删除

#10


public static void main(String[] args) {
//创建一张表table,每次生成一条之后,查询一下表中是否已存在
//这样的话,数据越来越多,后面就挺麻烦的,判断多次才能取到一个表中不存在的

String result = new Test().getRandom();
System.out.println(result);

//建议一次性在数据库表中插入多条数据(如10000条),
//表名table、主键自增长id、随机数:randoms,编写程序
//执行insert 语句插入
//然后创建一个sequence,从1开始,步数为1
//select randoms from table where id = (select sequence.nextval from dual);
}
public String getRandom(){
String result = "";
//下面的6改成8就是8位随机数字
while (result.length() < 6) {
String str = String.valueOf((int)(Math.random()*10));
if(result.indexOf(str) == -1){
result += str;
}
}
return result;
}

#1


<script>
        var arr = [];
        while (true) {
            var num = parseInt(Math.random()*100+1);
            if(arr.indexOf(num) == -1){
                arr[arr.length] = num;
            }
            if (arr.length>=6) {
                break;
            }
        }
        console.log(arr);
    </script>

#2


也可以引用生成当前时间的方法生成数字这个思路

#3


每次生成之后都用数组或哈希表之类的记录下来,下次生成时判断哈希表中是否有相同内容,有则重新生成数字并再次判断

#4


引用 1 楼 Bs__Q 的回复:
<script>
        var arr = [];
        while (true) {
            var num = parseInt(Math.random()*100+1);
            if(arr.indexOf(num) == -1){
                arr[arr.length] = num;
            }
            if (arr.length>=6) {
                break;
            }
        }
        console.log(arr);
    </script>




存在一个这样的问题,因为数据库放的6位数,后期生成新的数时都要和数据库数据库里的对比,效率很低

#5


引用 3 楼 jslang 的回复:
每次生成之后都用数组或哈希表之类的记录下来,下次生成时判断哈希表中是否有相同内容,有则重新生成数字并再次判断


我用了一个set集合存放数据库已有的随机数,然后往里添加一个新的随机数,判断如果size()变大了就证明生成的不是重复的,如果不是就重新生成,但这样效率很低,并且会莫名的卡死

#6


引用 4楼我是你的主体 的回复:
Quote: 引用 1 楼 Bs__Q 的回复:

<script>
        var arr = [];
        while (true) {
            var num = parseInt(Math.random()*100+1);
            if(arr.indexOf(num) == -1){
                arr[arr.length] = num;
            }
            if (arr.length>=6) {
                break;
            }
        }
        console.log(arr);
    </script>




存在一个这样的问题,因为数据库放的6位数,后期生成新的数时都要和数据库数据库里的对比,效率很低
受教,当时没想那么多 随机6位纯数字不重复怎么做

#7


楼主可以看看我写的博客
http://blog.csdn.net/qq_26106607/article/details/68289854

#8


先建个表
id自增,str_rnd为6位或者8位,往这个表里填充随机数字,例如10万个不重复的随机数字

要用的时候,顺序从这个表中取出str_rnd

#9


创建数组生成全部六位数,每次用提取一个删除

#10


public static void main(String[] args) {
//创建一张表table,每次生成一条之后,查询一下表中是否已存在
//这样的话,数据越来越多,后面就挺麻烦的,判断多次才能取到一个表中不存在的

String result = new Test().getRandom();
System.out.println(result);

//建议一次性在数据库表中插入多条数据(如10000条),
//表名table、主键自增长id、随机数:randoms,编写程序
//执行insert 语句插入
//然后创建一个sequence,从1开始,步数为1
//select randoms from table where id = (select sequence.nextval from dual);
}
public String getRandom(){
String result = "";
//下面的6改成8就是8位随机数字
while (result.length() < 6) {
String str = String.valueOf((int)(Math.random()*10));
if(result.indexOf(str) == -1){
result += str;
}
}
return result;
}