当前位置: 代码迷 >> J2EE >> 怎样生成一个礼品卡的卡号?该如何处理
  详细解决方案

怎样生成一个礼品卡的卡号?该如何处理

热度:285   发布时间:2016-04-22 02:37:29.0
怎样生成一个礼品卡的卡号?
本人新手,刚接到一个任务。要做一个礼品卡系统。该礼品卡要有金额,生成日期以及随机码了,但是生成的随机码不能重复,以保证同一天生成的礼品卡中没有重复的(虽然重复的概率很小)。我自己有个初步方案:

1.第1到8位 为随机码(数字加字母)
2.第9到10位 为礼品卡金额
3.第11到12位 为生成礼品卡的日期
4.第13到14位 为生成礼品卡的月份
5.第15到16位 为生成礼品卡的年份的后两位

一次可以同时生成几张同一金额的礼品卡,怎样防止重复?最好希望有代码贴出~~

------解决方案--------------------
随机码加上 当前日期 年月日 时分秒

------解决方案--------------------
时间戳~ 肯定不重复的~~~
或者自己用随机数生成 ~~每次生成判断是否有重复 ,有重复重新生成~~
------解决方案--------------------
最简单的办法就是设置数据库的唯一索引
------解决方案--------------------
需要导入commons-lang.jar

Java code
import 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));        }    }}
------解决方案--------------------
改了一下,不知道还有没有问题。。。

Java code
        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));        }
------解决方案--------------------
用oracle 序列
------解决方案--------------------
return java.util.UUID.randomUUID.toString().replaceAll("-", "");
------解决方案--------------------
用UUID自动生成32位字符更好
------解决方案--------------------
探讨
引用:
用oracle 序列


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

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