怎样生成一个礼品卡的卡号?
本人新手,刚接到一个任务。要做一个礼品卡系统。该礼品卡要有金额,生成日期以及随机码了,但是生成的随机码不能重复,以保证同一天生成的礼品卡中没有重复的(虽然重复的概率很小)。我自己有个初步方案:
1.第1到8位 为随机码(数字加字母)
2.第9到10位 为礼品卡金额
3.第11到12位 为生成礼品卡的日期
4.第13到14位 为生成礼品卡的月份
5.第15到16位 为生成礼品卡的年份的后两位
一次可以同时生成几张同一金额的礼品卡,怎样防止重复?最好希望有代码贴出~~
[解决办法]
随机码加上 当前日期 年月日 时分秒
[解决办法]
时间戳~ 肯定不重复的~~~
或者自己用随机数生成 ~~每次生成判断是否有重复 ,有重复重新生成~~
[解决办法]
最简单的办法就是设置数据库的唯一索引
[解决办法]
需要导入commons-lang.jar
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)); } }}
[解决办法]
改了一下,不知道还有没有问题。。。
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位字符更好
[解决办法]