批量生成10位纯纯数字卡号, 卡号不能重复,卡号放在数据库里的有时候批量生成可能 有10万张卡号  有些人可能认为  随机生成10位 然后比较数据库里面是不是已经存在, 要是已经存在那就不能插入数据库了如果要生成10万张卡号,还要比较数据库 这样效率就会更慢,不知道也没有什么好的算法, 生成10位纯数字 不用比较数据库?  谢谢大家回复

解决方案 »

  1.   

    批量生成是指同一时刻吗用System.currentTimeMillis()取后10位行不行
      

  2.   

    写一个方法单独生成卡号,取数据库里最后一条数据的卡号然后做 +1 得到此卡号;
    如果感觉这样不好,那就在数据库里专门存一个最后的卡号字段 cardID(及最大的卡号值存储),这样想得到新的卡号时,取出cardID做 +1;然后在把 carID 的值改为 carID+1的值; 
    其实:Oracle里面的主键就是这样维护的,所有的表主键,会单独建一张表,维护所有表的主键ID;
      

  3.   

    数字加1最简单。每次SQL获得MAX(卡号),然后往上面加就行了有一个比较另类的方法,用数据库来判断。把数据库里存储卡号那个表格的“卡号”列设置成UNIQUE,在程序里存储那部分catch异常,如果有相同卡号出现并试图存储,数据库将不允许操作,抛出异常,这时候你再重新生成一个卡号,看能否存储。但这个方法和比对数据库没什么区别,每条都需要访问一次或多次。
      

  4.   

    补充一点:要是想得到 10万个卡号,那就取出最大的卡号后(最大卡号取法就按上面说的),将其传入到写好的方法里面(这里面可以写for循环 参数两个一个就是 最大卡号值,一个是你要多少个新卡号),然后在得出卡号的最后,不要忘记更改存储最大的卡号值即可。
      

  5.   

    可以考虑使用oracle的sequences,每次的卡号都由他来生成。可以避免重复。
      

  6.   

    生成过的都扔到HashSet,新生成的用contains判断一下就行了吧