兑换码的意思是指消2113费者可以使鼡一串数目5261符号通过商家换取相4102应的优惠活动或者同等条件的1653商品。
兑换汉语词汇泛指对换、交换也指不同货币的交换,码表示数目嘚符号
现在生活中,兑换码也以二维码或者条形码的形式存在。
消费者可以通过手机扫码软件扫二维码或者条形码的图,生成用于商家可以用于兑换的条件
玩家在游戏内兑换某些奖品,商家也会需要用到的代码即兑换码。
每一位兑换码有4部分构成:类型、id、随机碼、校验码
类型为每次生成兑换码的组id这里只用了1个byte来存储,可以根据需要增加“id”为每次生成的每个兑换码的唯一的“id”。
随机码為每个兑换码的随机数校验码用来在验证兑换码时进行校验。
根据输入的兑换码总长度计算出随机码的位数然后对每一位随机赋值。
紦类型、“id”和随机码组成一个“byte”数组计算总和然后对“byte.max”进行取余运算。
由于前面的时间和id有一定的规律性我们使用随机码对时間和id进行异或操作,使兑换码看起来没有规律
为了更加安全,可以使用一个密码对全部数据按顺序进行异或运算
这样即使知道了算法,在不知道密码的情况些也很难对数据进行破解
我们使用32位的编码表来表示二进制数据,但是每个“byte”位长度为8能表示127个数据。
所以這里我们要对原数据进行拆分32位编码表只需要5位就能表示,所以这里我们把原“byte”数组拆分为每5位为一个byte
红色部分直接补0,末尾不足嘚部分也补充为0这样一位数据就可以正好对应编码表中的一个数据。
把我们重新整理好的byte数组按照编码表转换位字符串就是我们最终的兌换码