asp生成不需要数据库的中奖码

恭喜您,您中奖了,你的中奖码是(请牢记,领奖需要):XXXXXXXXXXX

然后用户输入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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/2424.html