我正在开发一个在线活动票务系统,用户可以自行打印他的票据并出现在将被扫描的事件(条形码),理想情况下,这个人会进入.我的问题是如何创建一个满足以下要求的"票证代码":
数据范围非常小,4天内只有大约20个活动,每个活动约5,000张门票(约100,000个不同的门票代码)
现在我有几个字段没有打印在故障单上,用户不知道我可以使用它来编码部分"票证代码",所以我可以使用EventId,OrderId,EventDate和一些盐来创建一个小的"哈希"部分代码(想法?),但我仍然坚持顺序或GUID(太长)的票证ID
那么关于如何做到这一点的任何想法或指示?
我正在写一个小型系统,允许我通过在我们的网站上生成可兑换MP3的优惠券来销售乐队的音乐.
优惠券需要用户输入的代码.代码需要具备以下特性:
如果我使用GUID,我关注第1点.如果我使用递增整数,我关注第2点.中间必须有一些快乐的媒介,对吧?我想也许这项工作已经完成,并且有一个理想的解决方案等着我.如果没有这个,我想我会使用随机的字母数字字符串,或者只是字母(为了清楚起见,不包括I和O),并且应用程序块IP地址失败了X次,这表明可能的蛮力攻击.如果我使用它,字符串有多长,X的值有多大,为什么?
谢谢你的帮助!
更新:我没有完全明确这个方法:我将生成用于打印的凭证代码列表,然后在演出后输入"已售出"代码.因此,我认为像校验和这样的元素不像在不使用验证服务器的软件密钥中那样.
我想生成一个简短的唯一ID,而不必检查冲突.
我目前做这样的事情,但我目前生成的ID是随机的,并且在循环中检查冲突是令人讨厌的,并且如果记录数量显着增加将会变得昂贵.
通常担心碰撞不是问题,但我想要生成的唯一ID是一个短的唯一字符串5-8个字符,字母数字,就像tinyurl一样.
编辑:我想从5个字符开始,如果我达到6000万条目,那么去6 ...等等.
为此,我想我可以使用对用户隐藏的auto_increment值,而是用一个MD5或其他方法来呈现它们以从中生成唯一的字符串.
生成的字符串看起来不应该是线性的,所以简单地将auto_incremented ID转换为base 36[0-9A-Z]有点过于简单了,但是这样的函数就是我要用的东西.
编辑:安全性不是问题,因为这不会用于保护信息.它只是更长字符串的快捷方式.谢谢.
感谢您的建议,抱歉延误.牙医..