源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2020-05-21 12:27 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:asp生成不需要数据库的中奖码
恭喜您,您中奖了,你的中奖码是(请牢记,领奖需要):XXXXXXXXXXX 然后用户输入XXXXXXXXXXX,简单验证后就可以领奖了。 你使用过这样的功能,或者有没有想开发一个这样的功能呢? 有一个思路是:将一批唯一中奖码,录入的到数据库,中奖时,取出来一条,做一个标记,把中奖码告诉 用户。 但是这样要先将一批中奖码录入到数据库中,有没有其他方法呢? 比如:200807151054281502895e585d7e4b529e,能不能做到:不到数据库中查询验证就可以确认这个中奖 码是不是有效(不是伪造)的呢? 我有一个思路,如果愿意,请听我说一下:) 比如这个中奖码:200807151054281502895e585d7e4b529e 他有三部分组成 20080715105428 1502 895e585d7e4b529e 20080715105428 是年月日时分秒YYYYMMDDhhmmss 1502 是四位随机数,防止第一部分重复 895e585d7e4b529e 前两部分+PrivateKey的 MD5 16位的值 一句话:中奖码的前18位和后16位是有关系的 这样,只要别人猜不到你的PrivateKey,就伪造不了你的中奖码。 不足之处,这个中奖码长了点:(   代码如下: getkey() 返回一个唯一的中奖码 ckkey(s) 验证中奖码是否有奖
[u]复制代码[/u] 代码如下:
<% 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     Else         LShift = ((lValue And m_lOnBits(31 - iShiftBits)) * m_l2Power(iShiftBits))     End If End Function Private Function RShift(lValue, iShiftBits)     If iShiftBits = 0 Then         RShift = lValue         Exit Function     ElseIf iShiftBits = 31 Then         If lValue And &H80000000 Then             RShift = 1         Else             RShift = 0         End If         Exit Function     ElseIf iShiftBits < 0 Or iShiftBits > 31 Then         Err.Raise 6     End If     RShift = (lValue And &H7FFFFFFE) \ m_l2Power(iShiftBits)     If (lValue And &H80000000) Then         RShift = (RShift Or (&H40000000 \ m_l2Power(iShiftBits - 1)))     End If End Function Private Function RotateLeft(lValue, iShiftBits)     RotateLeft = LShift(lValue, iShiftBits) Or RShift(lValue, (32 - iShiftBits)) End Function Private Function AddUnsigned(lX, lY)     Dim lX4     Dim lY4     Dim lX8     Dim lY8     Dim lResult     lX8 = lX And &H80000000     lY8 = lY And &H80000000     lX4 = lX And &H40000000     lY4 = lY And &H40000000     lResult = (lX And &H3FFFFFFF) + (lY And &H3FFFFFFF)     If lX4 And lY4 Then         lResult = lResult Xor &H80000000 Xor lX8 Xor lY8     ElseIf lX4 Or lY4 Then         If lResult And &H40000000 Then             lResult = lResult Xor &HC0000000 Xor lX8 Xor lY8         Else             lResult = lResult Xor &H40000000 Xor lX8 Xor lY8         End If     Else         lResult = lResult Xor lX8 Xor lY8     End If     AddUnsigned = lResult End Function Private Function md5_F(x, y, z)     md5_F = (x And y) Or ((Not x) And z) End Function Private Function md5_G(x, y, z)     md5_G = (x And z) Or (y And (Not z)) End Function Private Function md5_H(x, y, z)     md5_H = (x Xor y Xor z) End Function Private Function md5_I(x, y, z)     md5_I = (y Xor (x Or (Not z))) End Function Private Sub md5_FF(a, b, c, d, x, s, ac)     a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_F(b, c, d), x), ac))     a = RotateLeft(a, s)     a = AddUnsigned(a, b) End Sub Private Sub md5_GG(a, b, c, d, x, s, ac)     a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_G(b, c, d), x), ac))     a = RotateLeft(a, s)     a = AddUnsigned(a, b) End Sub Private Sub md5_HH(a, b, c, d, x, s, ac)     a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_H(b, c, d), x), ac))     a = RotateLeft(a, s)     a = AddUnsigned(a, b) End Sub Private Sub md5_II(a, b, c, d, x, s, ac)     a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_I(b, c, d), x), ac))     a = RotateLeft(a, s)     a = AddUnsigned(a, b) End Sub Private Function ConvertToWordArray(sMessage)     Dim lMessageLength     Dim lNumberOfWords     Dim lWordArray()     Dim lBytePosition     Dim lByteCount     Dim lWordCount     Const MODULUS_BITS = 512     Const CONGRUENT_BITS = 448     lMessageLength = Len(sMessage)     lNumberOfWords = (((lMessageLength + ((MODULUS_BITS - CONGRUENT_BITS) \ BITS_TO_A_BYTE)) \ (MODULUS_BITS \ BITS_TO_A_BYTE)) + 1) * (MODULUS_BITS \ BITS_TO_A_WORD)     ReDim lWordArray(lNumberOfWords - 1)     lBytePosition = 0     lByteCount = 0     Do Until lByteCount >= lMessageLength         lWordCount = lByteCount \ BYTES_TO_A_WORD         lBytePosition = (lByteCount Mod BYTES_TO_A_WORD) * BITS_TO_A_BYTE         lWordArray(lWordCount) = lWordArray(lWordCount) Or LShift(Asc(Mid(sMessage, lByteCount + 1, 1)), lBytePosition)         lByteCount = lByteCount + 1     Loop     lWordCount = lByteCount \ BYTES_TO_A_WORD     lBytePosition = (lByteCount Mod BYTES_TO_A_WORD) * BITS_TO_A_BYTE     lWordArray(lWordCount) = lWordArray(lWordCount) Or LShift(&H80, lBytePosition)     lWordArray(lNumberOfWords - 2) = LShift(lMessageLength, 3)     lWordArray(lNumberOfWords - 1) = RShift(lMessageLength, 29)     ConvertToWordArray = lWordArray End Function Private Function WordToHex(lValue)     Dim lByte     Dim lCount     For lCount = 0 To 3         lByte = RShift(lValue, lCount * BITS_TO_A_BYTE) And m_lOnBits(BITS_TO_A_BYTE - 1)         WordToHex = WordToHex & Right("0" & Hex(lByte), 2)     Next End Function Public Function MD5(sMessage)     m_lOnBits(0) = CLng(1)     m_lOnBits(1) = CLng(3)     m_lOnBits(2) = CLng(7)     m_lOnBits(3) = CLng(15)     m_lOnBits(4) = CLng(31)     m_lOnBits(5) = CLng(63)     m_lOnBits(6) = CLng(127)     m_lOnBits(7) = CLng(255)     m_lOnBits(8) = CLng(511)     m_lOnBits(9) = CLng(1023)     m_lOnBits(10) = CLng(2047)     m_lOnBits(11) = CLng(4095)     m_lOnBits(12) = CLng(8191)     m_lOnBits(13) = CLng(16383)     m_lOnBits(14) = CLng(32767)     m_lOnBits(15) = CLng(65535)     m_lOnBits(16) = CLng(131071)     m_lOnBits(17) = CLng(262143)     m_lOnBits(18) = CLng(524287)     m_lOnBits(19) = CLng(1048575)     m_lOnBits(20) = CLng(2097151)     m_lOnBits(21) = CLng(4194303)     m_lOnBits(22) = CLng(8388607)     m_lOnBits(23) = CLng(16777215)     m_lOnBits(24) = CLng(33554431)     m_lOnBits(25) = CLng(67108863)     m_lOnBits(26) = CLng(134217727)     m_lOnBits(27) = CLng(268435455)     m_lOnBits(28) = CLng(536870911)     m_lOnBits(29) = CLng(1073741823)     m_lOnBits(30) = CLng(2147483647)     m_l2Power(0) = CLng(1)     m_l2Power(1) = CLng(2)     m_l2Power(2) = CLng(4)     m_l2Power(3) = CLng(8)     m_l2Power(4) = CLng(16)     m_l2Power(5) = CLng(32)     m_l2Power(6) = CLng(64)     m_l2Power(7) = CLng(128)     m_l2Power(8) = CLng(256)     m_l2Power(9) = CLng(512)     m_l2Power(10) = CLng(1024)     m_l2Power(11) = CLng(2048)     m_l2Power(12) = CLng(4096)     m_l2Power(13) = CLng(8192)     m_l2Power(14) = CLng(16384)     m_l2Power(15) = CLng(32768)     m_l2Power(16) = CLng(65536)     m_l2Power(17) = CLng(131072)     m_l2Power(18) = CLng(262144)     m_l2Power(19) = CLng(524288)     m_l2Power(20) = CLng(1048576)     m_l2Power(21) = CLng(2097152)     m_l2Power(22) = CLng(4194304)     m_l2Power(23) = CLng(8388608)     m_l2Power(24) = CLng(16777216)     m_l2Power(25) = CLng(33554432)     m_l2Power(26) = CLng(67108864)     m_l2Power(27) = CLng(134217728)     m_l2Power(28) = CLng(268435456)     m_l2Power(29) = CLng(536870912)     m_l2Power(30) = CLng(1073741824)     Dim x     Dim k     Dim AA     Dim BB     Dim CC     Dim DD     Dim a     Dim b     Dim c     Dim d     Const S11 = 7     Const S12 = 12     Const S13 = 17     Const S14 = 22     Const S21 = 5     Const S22 = 9     Const S23 = 14     Const S24 = 20     Const S31 = 4     Const S32 = 11     Const S33 = 16     Const S34 = 23     Const S41 = 6     Const S42 = 10     Const S43 = 15     Const S44 = 21     x = ConvertToWordArray(sMessage)     a = &H67452301     b = &HEFCDAB89     c = &H98BADCFE     d = &H10325476     For k = 0 To UBound(x) Step 16         AA = a         BB = b         CC = c         DD = d         md5_FF a, b, c, d, x(k + 0), S11, &HD76AA478         md5_FF d, a, b, c, x(k + 1), S12, &HE8C7B756         md5_FF c, d, a, b, x(k + 2), S13, &H242070DB         md5_FF b, c, d, a, x(k + 3), S14, &HC1BDCEEE         md5_FF a, b, c, d, x(k + 4), S11, &HF57C0FAF         md5_FF d, a, b, c, x(k + 5), S12, &H4787C62A         md5_FF c, d, a, b, x(k + 6), S13, &HA8304613         md5_FF b, c, d, a, x(k + 7), S14, &HFD469501         md5_FF a, b, c, d, x(k + 8), S11, &H698098D8         md5_FF d, a, b, c, x(k + 9), S12, &H8B44F7AF         md5_FF c, d, a, b, x(k + 10), S13, &HFFFF5BB1         md5_FF b, c, d, a, x(k + 11), S14, &H895CD7BE         md5_FF a, b, c, d, x(k + 12), S11, &H6B901122         md5_FF d, a, b, c, x(k + 13), S12, &HFD987193         md5_FF c, d, a, b, x(k + 14), S13, &HA679438E         md5_FF b, c, d, a, x(k + 15), S14, &H49B40821         md5_GG a, b, c, d, x(k + 1), S21, &HF61E2562         md5_GG d, a, b, c, x(k + 6), S22, &HC040B340         md5_GG c, d, a, b, x(k + 11), S23, &H265E5A51         md5_GG b, c, d, a, x(k + 0), S24, &HE9B6C7AA         md5_GG a, b, c, d, x(k + 5), S21, &HD62F105D         md5_GG d, a, b, c, x(k + 10), S22, &H2441453         md5_GG c, d, a, b, x(k + 15), S23, &HD8A1E681         md5_GG b, c, d, a, x(k + 4), S24, &HE7D3FBC8         md5_GG a, b, c, d, x(k + 9), S21, &H21E1CDE6         md5_GG d, a, b, c, x(k + 14), S22, &HC33707D6         md5_GG c, d, a, b, x(k + 3), S23, &HF4D50D87         md5_GG b, c, d, a, x(k + 8), S24, &H455A14ED         md5_GG a, b, c, d, x(k + 13), S21, &HA9E3E905         md5_GG d, a, b, c, x(k + 2), S22, &HFCEFA3F8         md5_GG c, d, a, b, x(k + 7), S23, &H676F02D9         md5_GG b, c, d, a, x(k + 12), S24, &H8D2A4C8A         md5_HH a, b, c, d, x(k + 5), S31, &HFFFA3942         md5_HH d, a, b, c, x(k + 8), S32, &H8771F681         md5_HH c, d, a, b, x(k + 11), S33, &H6D9D6122         md5_HH b, c, d, a, x(k + 14), S34, &HFDE5380C         md5_HH a, b, c, d, x(k + 1), S31, &HA4BEEA44         md5_HH d, a, b, c, x(k + 4), S32, &H4BDECFA9         md5_HH c, d, a, b, x(k + 7), S33, &HF6BB4B60         md5_HH b, c, d, a, x(k + 10), S34, &HBEBFBC70         md5_HH a, b, c, d, x(k + 13), S31, &H289B7EC6         md5_HH d, a, b, c, x(k + 0), S32, &HEAA127FA         md5_HH c, d, a, b, x(k + 3), S33, &HD4EF3085         md5_HH b, c, d, a, x(k + 6), S34, &H4881D05         md5_HH a, b, c, d, x(k + 9), S31, &HD9D4D039         md5_HH d, a, b, c, x(k + 12), S32, &HE6DB99E5         md5_HH c, d, a, b, x(k + 15), S33, &H1FA27CF8         md5_HH b, c, d, a, x(k + 2), S34, &HC4AC5665         md5_II a, b, c, d, x(k + 0), S41, &HF4292244         md5_II d, a, b, c, x(k + 7), S42, &H432AFF97         md5_II c, d, a, b, x(k + 14), S43, &HAB9423A7         md5_II b, c, d, a, x(k + 5), S44, &HFC93A039         md5_II a, b, c, d, x(k + 12), S41, &H655B59C3         md5_II d, a, b, c, x(k + 3), S42, &H8F0CCC92         md5_II c, d, a, b, x(k + 10), S43, &HFFEFF47D         md5_II b, c, d, a, x(k + 1), S44, &H85845DD1         md5_II a, b, c, d, x(k + 8), S41, &H6FA87E4F         md5_II d, a, b, c, x(k + 15), S42, &HFE2CE6E0         md5_II c, d, a, b, x(k + 6), S43, &HA3014314         md5_II b, c, d, a, x(k + 13), S44, &H4E0811A1         md5_II a, b, c, d, x(k + 4), S41, &HF7537E82         md5_II d, a, b, c, x(k + 11), S42, &HBD3AF235         md5_II c, d, a, b, x(k + 2), S43, &H2AD7D2BB         md5_II b, c, d, a, x(k + 9), S44, &HEB86D391         a = AddUnsigned(a, AA)         b = AddUnsigned(b, BB)         c = AddUnsigned(c, CC)         d = AddUnsigned(d, DD)     Next     'MD5 = UCase(WordToHex(a) & WordToHex(b) & WordToHex(c) & WordToHex(d))    '32byte     MD5 = LCase(WordToHex(b) & WordToHex(c))  'I crop this to fit 16byte database password :D End Function Function CFTGetServerDate(d)     Dim strTmp, iYear,iMonth,iDate      iYear = Year(d)      iMonth = Month(d)      iDate = Day(d)      strTmp = CStr(iYear)     If iMonth < 10 Then          strTmp = strTmp & "0" & Cstr(iMonth)     Else          strTmp = strTmp & Cstr(iMonth)     End If      If iDate < 10 Then          strTmp = strTmp & "0" & Cstr(iDate)      Else          strTmp = strTmp & Cstr(iDate)      End If      CFTGetServerDate = strTmp  End Function Function CFTGetServertime(d)     Dim strTmp, iYear,iMonth,iDate      iYear = hour(d)      iMonth = minute(d)      iDate = second(d)      strTmp = ""     If iYear < 10 Then          strTmp = strTmp & "0" & Cstr(iYear)     Else          strTmp = strTmp & Cstr(iYear)     End If      If iMonth < 10 Then          strTmp = strTmp & "0" & Cstr(iMonth)     Else          strTmp = strTmp & Cstr(iMonth)     End If      If iDate < 10 Then          strTmp = strTmp & "0" & Cstr(iDate)      Else          strTmp = strTmp & Cstr(iDate)      End If      CFTGetServertime = strTmp  End Function function GetRnd(min,max)     Randomize     GetRnd = Int((max - min + 1) * Rnd + min) end function function getrnddatenum()     getrnddatenum = CFTGetServerDate(now) & CFTGetServertime(now) & GetRnd(1000,9999) end function 'PrivateKey,尽量复杂一些,开始使用后,就不能更改了。 dim keyinfokey keyinfokey = "51windows.net@1234567890!@#$%^&*()QWERFGHJK" '得到中奖码 function getkey()     skey = getrnddatenum()     skey2 = md5(skey & keyinfokey)     getkey = skey & skey2 end function '验证中奖码 function ckkey(s)     strs = s     if len(strs)<> 34 then         ckkey = false         exit function     end if     datenum = left(strs,18)     md5oldstr = right(strs,16)     md5str = md5(datenum & keyinfokey)     if lcase(md5str) = lcase(md5oldstr) then         ckkey = true     else         ckkey = false     end if end function %>
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部