我正在编写一个小系统,可以生成代金券,在演出现场出售我们乐队的音乐,用户可以通过兑换代金券在我们的网站上下载MP3文件。
代金券需要有一个代码,用户需要输入该代码。 代码需要具备以下特点:
- 在长度和内容方面具有某种人类可读性,以防止用户感到沮丧和输入错误。
- 给定一个代金券代码,不容易猜测到另一个代金券代码。
如果我使用GUIDs,我会担心点1。 如果我使用递增整数,我会担心点2。 必须在两者之间找到一种理想的解决方案,对吧? 我想也许这项工作已经完成,并且有一个理想的解决方案等待着我。 在缺乏这个方案的情况下,我考虑采用随机的字母数字字符串,或仅包含字母(为了清晰起见,I和O除外),并让应用程序阻止失败X次的IP地址,这将表明可能有暴力攻击。 如果我采用这种方法,多长的字符串和什么值的X会起作用,为什么呢?
谢谢你的帮助!
更新:我没有完全明确方法:我将生成代金券代码列表以供打印,然后在演出后输入“已售出”的代码。 因此,像校验和这样的元素就不像使用验证服务器的软件密钥那样必要了。