本人新手,刚接到一个任务。要做一个礼品卡系统。该礼品卡要有金额,生成日期以及随机码了,但是生成的随机码不能重复,以保证同一天生成的礼品卡中没有重复的(虽然重复的概率很小)。我自己有个初步方案:1.第1到8位 为随机码(数字加字母)
2.第9到10位  为礼品卡金额
3.第11到12位 为生成礼品卡的日期
4.第13到14位 为生成礼品卡的月份
5.第15到16位 为生成礼品卡的年份的后两位一次可以同时生成几张同一金额的礼品卡,怎样防止重复?最好希望有代码贴出~~

解决方案 »

  1.   

    需要导入commons-lang.jarimport org.apache.commons.lang.RandomStringUtils;public class Test { /**
     * @param args
     */
    public static void main(String[] args) { List<String> codes = new ArrayList<String>(); int length = 10; String random = RandomStringUtils.randomAlphanumeric(8);
    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
    String date = sdf.format(new Date()); boolean isExist = false;
    int loop = 0; do {
    loop++;
    isExist = false;
    for (int i = 0; i < codes.size(); i++) {
    if (random.equals(codes.get(i))) {
    isExist = true;
    break;
    }
    }
    random = RandomStringUtils.randomAlphanumeric(8);
    codes.add(date + random);
    } while (isExist || loop < length); for (int i = 0; i < codes.size(); i++) {
    System.out.println(codes.get(i));
    }
    }
    }
      

  2.   

    改了一下,不知道还有没有问题
    List<String> codes = new ArrayList<String>(); int length = 10;
    boolean isExist = false;
    String random = null; SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
    String date = sdf.format(new Date()); do {
    random = RandomStringUtils.randomAlphanumeric(8);
    isExist = false;
    for (int i = 0; i < codes.size(); i++) {
    if (random.equals(codes.get(i))) {
    isExist = true;
    break;
    }
    }
    if (!isExist) {
    codes.add(date + random);
    }
    } while (isExist || codes.size() < length);

    for (int i = 0; i < codes.size(); i++) {
    System.out.println(codes.get(i));
    }
      

  3.   


    我们用的是mysql。用oracle序列,能讲清楚点吗?实现的细节~~~
      

  4.   

    return java.util.UUID.randomUUID.toString().replaceAll("-", "");
      

  5.   

    create sequence DMSYS.DM$EXPIMP_ID_SEQ
    minvalue 20111027000000000001
    maxvalue 99999999999999999999
    start with 1
    increment by 1
    cache 20;
    从20111027000000000001开始,每次增加1,一直到99999999999999999999。这样肯定不会重复的拉。当你能增加到99999999999999999999得时候,说明你老板发财了,呵呵。如果真得发财了也好办啊,后面再继续增加位数即可
      

  6.   

    声明一个集合  每次生成卡号 (方法你说的就行或者其他随机生成方法很多) 存入集合   
    首先判断集合里有没有重复(list.contains())  有重复重新生成 无重复就添加到集合里