b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

java随机数 大量兑换码的生成与验证方案(Java)(2)

电脑杂谈  发布时间:2018-02-10 13:23:30  来源:网络整理

这里为了方便还写了一个byte[]的辅助类:

public class ByteHapper {
	//原始数组
	byte[] bytes;
	//记录当前写入到多少位
	int index;
	
	private ByteHapper(int capacity){
		bytes = new byte[capacity];
		index = 0;
	}
	
	public static ByteHapper CreateBytes(int capacity){
		ByteHapper byteHapper = new ByteHapper(capacity);
		return byteHapper;
	}
	
	//向数组中追加内容
	public ByteHapper AppendNumber(long val){
		byte[] arr = Number2byte(val);
		AppendBytes(arr);
		return this;
	}
	public ByteHapper AppendNumber(int val){
		byte[] arr = Number2byte(val);
		AppendBytes(arr);
		return this;
	}
	public ByteHapper AppendNumber(short val){
		byte[] arr = Number2byte(val);
		AppendBytes(arr);
		return this;
	}
	public ByteHapper AppendNumber(byte val){
		byte[] arr = new byte[]{val};
		AppendBytes(arr);
		return this;
	}
	
	/**
	 * 获取数据的总和
	 * @return
	 */
	public int GetSum(){
		int ret = 0;
		for(int i = 0 ; i < bytes.length ; i ++){
			ret += bytes[i];
		}
		return ret;
	}
	
	//追加byte数组
	public ByteHapper AppendBytes(byte[] arr){
		
		for(byte i = 0 ; i < arr.length ; i ++){
			bytes[index + i] = arr[i];
		}
		
		index += arr.length;
		return this;
	}
	
	/**
     * 将数字转换为byte数组
     */
    public static byte[] Number2byte(long val) {
    	
        byte[] arr = new byte[]{
        		(byte) ((val >> 56) & 0xFF),   
		        (byte) ((val >> 48) & 0xFF),      
		        (byte) ((val >> 40) & 0xFF),         
		        (byte) ((val >> 32) & 0xFF), 
                (byte) ((val >> 24) & 0xFF),   
		        (byte) ((val >> 16) & 0xFF),      
		        (byte) ((val >> 8) & 0xFF),      
		        (byte) (val & 0xFF) 	
        };
        
        return arr;
    }
    public static byte[] Number2byte(int val) {
    	
        byte[] arr = new byte[]{
                (byte) ((val >> 24) & 0xFF),   
		        (byte) ((val >> 16) & 0xFF),      
		        (byte) ((val >> 8) & 0xFF),      
		        (byte) (val & 0xFF) 	
        };
        
        return arr;
    }
    public static byte[] Number2byte(short val) {
    	
        byte[] arr = new byte[]{     
		        (byte) ((val >> 8) & 0xFF),      
		        (byte) (val & 0xFF) 	
        };
        
        return arr;
    }
}

运行Redeem类可以看到如下输出:

可以看到正确的码都可以验证成功,我们对原来的码做稍微的修改和随便输入的乱码都会验证失败。

这里在生成兑换码时,最后一步对原byte数组进行拆分操作,是生成一个新数组,然后根据原数组计算新数组中每一位的值,这里如果是在c/c++中会方便很多,直接只用指针访问地址,然后每5位操作一下就可以,但是在java暂时只能想到这种笨方法,不知道有没有更方便的方法,如果有,还请多多指教~~


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-70092-2.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 甲斐荣二
      甲斐荣二

      只要不是严重疏忽和恶意

    • 白胡子
      白胡子

      二是北洋水师的军舰的设计落后

    • 冯晖
      冯晖

      宋茜也美美的@在法家拿到五冠王的瓦片

    热点图片
    拼命载入中...