然后用户输入XXXXXXXXXXX,简单验证后就可以领奖了。
你使用过这样的功能,或者有没有想开发一个这样的功能呢?
有一个思路是:将一批唯一中奖码,录入的到数据库,中奖时,取出来一条,做一个标记,把中奖码告诉
用户。
但是这样要先将一批中奖码录入到数据库中,有没有其他方法呢?
比如:200807151054281502895e585d7e4b529e,能不能做到:不到数据库中查询验证就可以确认这个中奖
码是不是有效(不是伪造)的呢?
我有一个思路,如果愿意,请听我说一下:)
比如这个中奖码:200807151054281502895e585d7e4b529e
他有三部分组成
20080715105428 1502 895e585d7e4b529e
20080715105428 是年月日时分秒YYYYMMDDhhmmss
1502 是四位随机数,防止第一部分重复
895e585d7e4b529e 前两部分+PrivateKey的 MD5 16位的值
一句话:中奖码的前18位和后16位是有关系的
这样,只要别人猜不到你的PrivateKey,就伪造不了你的中奖码。
不足之处,这个中奖码长了点:(
代码如下:
getkey() 返回一个唯一的中奖码
ckkey(s) 验证中奖码是否有奖
复制代码 代码如下:
<%
Private Const BITS_TO_A_BYTE = 8
Private Const BYTES_TO_A_WORD = 4
Private Const BITS_TO_A_WORD = 32
Private m_lOnBits(30)
Private m_l2Power(30)
Private Function LShift(lValue, iShiftBits)
If iShiftBits = 0 Then
LShift = lValue
Exit Function
ElseIf iShiftBits = 31 Then
If lValue And 1 Then
LShift = &H80000000
Else
LShift = 0
End If
Exit Function
ElseIf iShiftBits < 0 Or iShiftBits > 31 Then
Err.Raise 6
End If
If (lValue And m_l2Power(31 - iShiftBits)) Then
LShift = ((lValue And m_lOnBits(31 - (iShiftBits + 1))) * m_l2Power(iShiftBits)) Or &H80000000
内容版权声明:除非注明,否则皆为本站原创文章。