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 set = new HashSet();
		while(set.size() < codeNum){
			set.add(generateGiftCode(prefix));
		}
		List list = new ArrayList();
		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);
	}


你可能感兴趣的:(java)