java生成10位不重复的字母+数字组合

最近项目需求,需要生成10位不重复的字母+数字组合。开始时将数据向数据库中插入。再插入的时候需要跟数据库一个个的比对。非常慢。就想,如果前四位前缀固定的话,每次插入前,查询数据库是否存在这个前缀,不存在的话,才可以向数据库插入。
/**
	 * 生成一个10位的兑换码,大写字母数字组合
	 */
	private static String generateGiftCode(String prefix){
		StringBuffer sb = new StringBuffer();
		sb.append(prefix);
		for(int i = 0;i < 10-prefix.length(); i++){
			Random random = new Random();	
			String charOrNum = random.nextInt(2) % 2 == 0 ? "char" : "num";
	        if("char".equalsIgnoreCase(charOrNum)){   
	        	int choice = random.nextInt(2) % 2 == 0 ? 65 : 97;  
	            char val = (char)(choice + random.nextInt(26));
				sb.append(val);   
	        }else if("num".equalsIgnoreCase(charOrNum)){     
	        	int num = random.nextInt(9);
	        	sb.append(num);
	        }     
		}
		return sb.toString();
	}

@Override
	@Transactional
	public void sendCode(int gid, int pid, String creDate,
			String expireDate, int status, int codeNum, String prefix) {
		
		Set<String> set = new HashSet<String>();
		while(set.size() < codeNum){
			set.add(generateGiftCode(prefix));
		}
		List<Code> list = new ArrayList<Code>();
		for(String c : set){
			Code code = new Code();
			Code.setGid(gift_id);
			Code.setPid(platform_id);
			Code.setCreDate(str2date(cre_date));
			Code.setExpireDate(str2date(expire_date));
			Code.setStatus(status);
			Code.setCode(c);
			list.add(code);
		}
		giftCode.insertCode(list);
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值