是这样的,在做一个网站,想给注册会员随机分配一个8位的纯数字编号,类似于QQ号码,当然,不会有那么多五花八门的号,只是一个随机的,让网站的会员功能基于这个号码来操作,那位有比较好的算法,省时省资源?
我的做法是先在库里生成一批号,注册时随机分给用户,当号码快用完时再生成一批
那位有更好的方法,省时省力省资源

解决方案 »

  1.   

    是不是从10000000到99999999之间的数字啊?LZ是不是想要在数据库中现存储这些数字,然后将这些数字随机的分配给注册用户中的某个字段?我有个方案,不知道可不可行首先,现在数据库中创建一个表,表中就1个字段,类型为int。之后,你可以使用你的程序,将这个表中分配10000000到99999999的数字。应该很好分配吧如果要进行分配,则从刚才创建的临时表中读取所有的数据,并存放到一个数组中。或者你可以读取指定个数的数据。比如select top 10 from t进行了初始化的数组,一定已经存储了这些数字,比如10个。(当然了,如果没有读取到数字,你就可以调用一个方法在重新生成一组数字,并再次重新添加到那个临时表中)。然后使用随机数类,好像是Random吧,随即生成1-10范围内的随机数。然后依照这个随机数查找数组中为这个随机数的索引位置上的数,并将这个数给用户当类似的数。类似的代码为:static int getValue() {
        //假设这里就是你从数据库中读取的一组数字
        int[] values = new int[] {
            1, 2, 3, 4, 5, 6, 7, 8, 9};
        int r = new Random().nextInt(10);
        //然后在经过你的方法,删除数据库中取得的指定的值,就是删除values[r]
        return values[r];
      }  public static void main(String[] args) {
        System.out.println(getValue());
        System.out.println(getValue());
        System.out.println(getValue());
        System.out.println(getValue());
        System.out.println(getValue());
      }
      

  2.   

    谢谢楼上的提示,但你好像没有理解我的意思,不是从10000000到99999999这间的数,是从1-10取一个数,取八次,组成一个八位数(如:56984745 87469521 21468745 25789645),这个八位数是整系统唯一的,分配给用户,当用户登录系统后的一些操作根据这个号码来完成,这么说吧,就像QQ号一样,只不过QQ号五花八门,什么QQ行,年分号等,我这个没那么多讲究,就是随机的,全站唯一的就成,大家可以看下新浪博客,会生成一个号,如:blog.sina.com.cn/u/15498752  这样一个号,有人可能会说,设置一个ID字段,自动增加就完了,我不想用这个方法,想随机生成这样一个八位号
    我想是不是可以用GUID这个算法来完成,大家给个提示
    谢谢!!!!!
      

  3.   

    8位的流水号就行了,QQ号码以前也是递增的。其实号码为1+7个0 就行了indentity 的都可以
    sequence也行自己用一个表单独记录也行
      

  4.   

    java2000_net  谢谢你,我知道你说的方法,可是我也说了我不想用这种方法
    要不也不会来这里问
      

  5.   

    System.currentTimeMIllis()方法调用所产生的数字里面,取8位楼主觉得这样可以吗?
      

  6.   

    或者试试这个方法 UUID.randomUUID().getMostSignificantBits()  UUID类在java.util.*包里面,从jdk1.5就开始支持。
      

  7.   

    我觉得这样首先 产生100个随机数  然后插入数据库,这个号码做主键 
    然后每次用select TOP1之类的方法找没有记录的空白号等差不多这批用完的时候 系统再产生100个新的记录,插入数据库  ,如果有碰到有相同的则忽略不管等这批差不多又要分完的时候再产生......以此循环.....虽然有99999999条记录能用,不过越到后期成功率也越低啊
      

  8.   

    我觉得yegaofei说的是个办法,应该可行,其它人还有好的方法吗?像楼上说的产生100个随机数备用,重点是这100个数怎么产生重复机率小省时省力省资源
      

  9.   

    sequence方法就可以啊注册一次,系统自动生成一个号