我希望能够生成对单个Android设备有效的字母数字代码(如折扣代码中),每个代码都有限。
也就是说,我需要找到一种方法来生成唯一的无限(或大量,至少)代码,这些代码仅对单个设备有效。
我考虑过使用MAC地址作为代码生成的“种子”,但我不知道如何自己生成代码。这个问题有什么共同的方法或解决方案吗?
PS。我需要一种不依赖于代码数据库的算法,因为我的设备在激活代码时可能没有连接。
答案 0 :(得分:1)
基本上你正在寻找的是某种形式的哈希函数。您可以通过生成任意随机数作为基础来实现此目的。一旦你有了这个,计算它的哈希值(作为一个字符串),以及它与设备的mac地址连接的哈希值。折扣代码可以是:
temp = hash(random())
code = concat(temp, hash(concat(mac_address, temp)))
然后可以通过确认代码的前半部分可以连接到mac地址并进行散列以生成后半部分来检查。
valid = hash(concat(mac_address, first_half(code))) == second_half(code)
或者,您可以跟踪已经请求的数量而不是随机数,而是使用它来代替random()调用。这应该*始终为您提供唯一的代码进行处理,您可以跟踪您的服务器上已兑换的代码。
显然,以上所有都是非常通用的伪代码。我希望这会有所帮助。
有关哈希函数的一些信息(特别是加密函数,这是你想要的安全事件):