唯一随机码

先做种子自己然后获取时间将时间转换为以种子长度为进制的码。

然后取出转换的结果长度并补充剩余的长度的随机码

最后将这随机码转换成数字并按数字获取种子中的随机码

(当然这进制要大于2小于36,我这里调用的api,没写特殊的转换进制)

在这里面误导调换,当长度大于9的时候会产生多的随机码,随机码种子可以是特殊符号。

有问题欢迎来喷。

	/** 
	* @Fields digits : randomString的随机种子
	*/
	private static final char [] digits = "IWKSXM9Q7P8A1L3Z2U6E5J4D0NCYRHFNVTBG".toCharArray(); 

/**
	* @Title: randomString 
	* @Description: 获取长度为9-36的唯一随机码
	* @param length
	* @return
	* @return String  
	* @author 万事屋の小孩 QQ675509308
	* @date 2014年12月2日 下午1:53:15
	*/
	public static String randomString(int length){
		if (length < 1 ){
			
			length = 1;
		}
		else if(length > 36){
			length = 36;
		}
		
		String k = System.currentTimeMillis()+"";
		
		int integermaxvaluelength = (Integer.MAX_VALUE+"").length();
		
		StringBuffer key= new StringBuffer(Integer.toString(Integer.parseInt(k.substring(0,integermaxvaluelength)), digits.length));
		
		key.append(Integer.toString(Integer.parseInt(k.substring(integermaxvaluelength)), digits.length));
		//然后取出转换的结果长度
		while(key.length() < length){

			key.append(Integer.toString((int) (Math.random() * digits.length),digits.length));
		}
		
		char keyCodes [] = key.toString().substring(0,length).toCharArray();
		
		key = null;
		key = new StringBuffer();
		//调换位置几次
		for(int z = 0 ; z < 3;z++){
			StringBuffer keyCodesStrO = new StringBuffer();
			StringBuffer keyCodesStrE = new StringBuffer();
			for(int i = 0 ; i < keyCodes.length; i++){
				if(i % 2 == 0){
					keyCodesStrO.append(String.valueOf(keyCodes[i]));
				}else{
					keyCodesStrE.append(String.valueOf(keyCodes[i]));
				}
			}
			keyCodesStrO.append(keyCodesStrE.toString());
			keyCodesStrE = null;
			keyCodes = keyCodesStrO.toString().toCharArray();
			keyCodesStrO = null;
		}
		for(char c: keyCodes){
			key.append(String.valueOf(digits[Integer.parseInt(String.valueOf(c),digits.length)]));
		}
		return key.toString();
	}


public static void main(String[] args) {
		System.out.println(randomString(10));
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值