我正在开发一个在线事件票务系统,用户可以自行打印他的票证,并出现在将被扫描(条形码)的事件上,理想情况下该人员可以进入。我的问题是如何创建一个满足以下要求的“机票代码”:


每个“机票代码”必须彼此足够不同(即,没有顺序编号)
理想情况下,将针对中央数据库检查票证,以防止重复使用,但它也需要能够脱机工作,在这种情况下,系统必须检查“有效”票证代码,并且在此未使用它门。
“票证代码”必须足够小,以便于在需要时键入密码
持票人只需要买票就可以进场(即无需身份证检查)


数据的范围非常小,在4天之内只会出现大约20个事件,每个事件大约有5,000张门票(大约100,000个不同的门票代码)

现在,我有几个字段没有打印在票证上,并且用户不知道可用于编码“票证代码”的一部分,因此我可以使用EventId,OrderId,EventDate和一些盐创建一个小的“哈希”作为部分代码(想法?),但我仍然坚持使用顺序ID或GUID的票证ID(太长)

那么关于如何执行此操作的任何想法或指示?

最佳答案

考虑一个基于Feistel网络的非常简单的方案来置换票证ID号。 This message(碰巧在PostgreSQL列表上,但与PostgreSQL并没有多大关系)描述了一个简单的Feistel network。在每张票证上,您可以打印票证ID号(顺序选择),然后打印“票证密码”,这是将ID号通过Feistel网络放置的结果。可能的变化形式包括在密码上附加一个校验位,并在Feistel网络上输入的内容不只是顺序生成的数字(数字+ 10,000 *事件ID的数字,等等)。

08-18 05:39
查看更多