有个程序客户要求每天登录程序时,登录密码都是不一样的,
所以我想根据系统日期,s=format(date,"yyyymmdd"),然后根据这个s值生成一个365*n天都不重复且相邻无规律的6位数字串,
请问该怎么弄?
例:050726 050727 050728 050729 050730
生成的密码串:
   123987 345869 343209 343988 320998    要求不重复且看起来无规律谢谢.
我搞来搞去,生成的数字串总是有重复的.而且一看总有规律性(比如隔个一周这些数字串又是一样的或是递增的),
高手指点一下啊.................(生成的序列有些重复没关系,但相邻的数字串不要有规律,要乱序的)

解决方案 »

  1.   

    我说说我的算法,
    跟具时间生存一个字符串,
    用MD5算法加上你的密鈅生成16位密码,(密鈅可以是动态的)
    对这16位取ASC值得到32位的数字。Private Function GetCode(str As String)
        Dim i As Integer
        Dim c As Integer
        Dim code As String
        str = MD5.MD5(str & "你的密鈅", 32)
        For i = 1 To 16
            c = Asc(Mid(str, i, 1)) 
            If c > 99 Then c = c - 32 '这句保存每个字符对应两位数字
            code = code & c
        Next
        GetCode = code
    End FunctionMD5是一个类,代码我就不贴了,其实可以用其它的算法,不一定是MD5。
    你这种加密的手段很好,不怕对方抓取数据包分析你的密码,但如果客户机日期和服务器的日期不一样时,会造成登陆失败!
      

  2.   

    sin(clng(date)) 因为正整数得sin值不可能为零和1,
    所以你等到了一个没有规律的小数,随便你去变化了
      

  3.   

    先用系统日期减 #2000-1-1#,然后对字符进行加密,我给你一个加密函数。
    最后生成的字符串是sn
    Private Function strEncrypt(strSource As String, strKey As String) As String  '字符串加密函数
    Dim n, m, i, X, k, y, zn = Len(strSource)
    m = Len(strKey)
    strEncrypt = ""
    For i = 1 To n
    X = Asc(Mid(strSource, i, 1))
    k = 1 + ((i - 1) Mod m)
    y = Asc(Mid(strKey, k, 1))
    z = X Xor y
    z = 33 + z - Int(z / 95) * 95
    strEncrypt = strEncrypt + Chr(z)
    Next i
    strEncrypt = strEncrypt
    End FunctionPrivate Sub Command1_Click()
    Dim dt As Date
    Dim sn As String
    dt = Date
    sn = Format(dt - #1/1/2000#, "000000")
    sn = strEncrypt(sn, "0")
    msgbox sn
    End Sub