不管是那天,得到系统日期,s=format(date,"yyyymmdd"),然后根据这个s值生成一个不重复的6位数字,请问该怎么弄?
例:050726 050727 050728 050729 050730
123987 345869 343209 343988 320998
只要得到的6位数字,不管日期是多少号,不重复就行了.
谢谢.
我搞来搞去,总是有重复的.高手指点一下啊.................
int(rnd*1000000) ?
Dim a As Long
Dim s As Date
s = Date
a = DateSerial(Year(s), Month(s), Day(s))
Debug.Print Format(a, "000000")
这样很容易重复的,尤其是年份信息,几乎没用啊
年去后两位,月份两位,日两位,每日一个,100年不重复,够用吧。
这样很容易重复的,尤其是年份信息,几乎没用啊
==========================
问题是楼主所说的“不重复的6位数字”的具体要求是什么。。。
楼主还是具体的说清楚要做些什么吧。。。。。。。。。加密????
取今天的日期,与#2000-1-1#的相差的天数,就不会重复。
Dim dt As Date
Dim sn As String
dt = Date
sn = Format(dt - #2000/01/01#, "000000")
同意楼上,最好是把时间一并加上,这样就是当天不同时间取出来的也不会重复了。
s=format(date,"##") 是唯一的,自己凑够六位就行了
format(clng(date), "00000#")
最简单的加解密方法就是xor啦。。。。。。。
用MD5加密,
这个,估计在这儿很难有很具体的答复了。最简单而又最麻烦的办法,就是你自己写一个映射表,将6位的日期映射到6为的字符串。要在复杂一点儿,那就是在映射函数上边下功夫了;那你只好去看密码学。不过我想,xor显然不能满足你的要求。另外,MD5也够呛,除了不可逆以外,你要是只截取其中的6位,并不能保证不会重复。
楼上的也许不明白他的目的
我想他的目的是在他的程序需要连接服务器。所以得用动态密码来实现,
楼主先择了日期,而没选择时间,就说明他考虑到了客户机和服务器上的时间差,也就是说他并不想知道客户机和服务器差多少秒,所以不可逆并不影响楼主想要的功能,实在想逆的话,可以用DES加密。
楼上说的并不能保证不会重复, 的确,不能保证不重复,大家想想,6位数字是有限的,而要代表的日期是无穷的,所以说虽你用什么方法,都会重复
在送你一个加密函数,不同日期结果不重复、不连续
Private Function strEncrypt(strSource As String, strKey As String) As String 字符串加密函数
Dim n, m, i, X, k, y, z
n = 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 Function
Private Sub Command1_Click()
Dim dt As Date
Dim sn As String
dt = Date
sn = Format(dt - #1/1/2000#, "000000")
sn = strEncrypt(sn, "0")
End Sub
取硬盘序列号+CPU序列号+主板序列号中的随意组成6位用来加密不更好吗?我目前就用这个。