| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1767 人关注过本帖
标题:如何自动生成不容易重复的六位数
只看楼主 加入收藏
karycheung
Rank: 1
等 级:新手上路
帖 子:6
专家分:3
注 册:2014-12-30
收藏
得分:0 
? INT(RAND(HOUR(DATE())*MINUTE(DATE())*SEC(DATE()))*1000000)
用時分秒來相乘就一天只有一次重複的概率


[ 本帖最后由 karycheung 于 2015-1-10 15:29 编辑 ]
2015-01-10 15:26
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
0-9加ABCD生成6位不重复数据,可产生2162160条记录

[ 本帖最后由 sdta 于 2015-1-10 16:04 编辑 ]

坚守VFP最后的阵地
2015-01-10 15:36
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
程序代码:
? _RandNum()

FUNCTION _RandNum()
    LOCAL dtName, nRecno, szNum
    dtName = "dt.dbf"
    IF !FILE(dtName)
        CREATE TABLE (dtName) (Num C(6)) 
        FOR i = 0 TO 999999
            APPEND BLANK
        ENDFOR
        REPLACE ALL Num WITH PADL(RECNO()-1, 6, "0")
        USE
    ENDIF
    CREATE CURSOR dt (Num C(6)) 
    APPEND FROM (dtName)
    IF !EOF()
        nRecno = INT((RECCOUNT() - 1) * RAND() + 1)
        GO  nRecno
        szNum = dt.Num
        COPY TO (dtName) FOR RECNO() != nRecno 
    ELSE
        szNum = ""    
    ENDIF
    RETURN szNum
ENDFUNC
2015-01-10 16:28
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
以下是引用吹水佬在2015-1-10 16:28:31的发言:

? _RandNum()

FUNCTION _RandNum()
    LOCAL dtName, nRecno, szNum
    dtName = "dt.dbf"
    IF !FILE(dtName)
        CREATE TABLE (dtName) (Num C(6))
        FOR i = 0 TO 999999
            APPEND BLANK
        ENDFOR
        REPLACE ALL Num WITH PADL(RECNO()-1, 6, "0")
        USE
    ENDIF
    CREATE CURSOR dt (Num C(6))
    APPEND FROM (dtName)
    IF !EOF()
        nRecno = INT((RECCOUNT() - 1) * RAND() + 1)
        GO  nRecno
        szNum = dt.Num
        COPY TO (dtName) FOR RECNO() != nRecno
    ELSE
        szNum = ""   
    ENDIF
    RETURN szNum
ENDFUNC

数据重复

坚守VFP最后的阵地
2015-01-10 16:38
fanjinyu9108
Rank: 2
等 级:论坛游民
帖 子:694
专家分:20
注 册:2014-1-16
收藏
得分:0 
我是说要重复概率小的,如果重复,程序检测到后就重新生成一个,新的如果又重复了,就再生成一个,直到不重复。吹水佬师傅的办法是要建表,但我是在别人已经建好的表上操作,不允许建新表。还有,吹水佬师傅说的RIGHT(SYS(3),6),我做了1000条数据测试,结果只有200条左右不重复,重复的概率蛮大。
2015-01-10 16:55
fanjinyu9108
Rank: 2
等 级:论坛游民
帖 子:694
专家分:20
注 册:2014-1-16
收藏
得分:0 
sdta师傅说的加ABCD也不允许,只能用数字,被限定了
2015-01-10 16:56
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
前面已经告诉你了0-9 151200条记录,用完了,再也没有可用的了

坚守VFP最后的阵地
2015-01-10 17:01
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
以下是引用sdta在2015-1-10 16:38:30的发言:


数据重复

注意这句,已经取出的数下次取数已经不存在,不可能有重复。
 COPY TO (dtName) FOR RECNO() != nRecno

[ 本帖最后由 吹水佬 于 2015-1-10 17:31 编辑 ]
2015-01-10 17:28
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
以下是引用吹水佬在2015-1-10 17:28:42的发言:


注意这句,已经取出的数下次取数已经不存在,不可能有重复。
 COPY TO (dtName) FOR RECNO() != nRecno

只能在这次程序运行期间
0-9组合成任意6位不重复的数据,只有151200条记录。
楼主的要求是,用过的数据不能重复使用。

不重复的6位数表
table6.rar (194.42 KB)

坚守VFP最后的阵地
2015-01-10 17:41
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
以下是引用fanjinyu9108在2015-1-10 14:40:12的发言:

怎么弄啊,能告诉我吗,我的用途是作为一个表每一条数据的密码,这个表大概2000条左右的记录,记录的密码不能重复,表中的记录不停的删除,又不停地增加,删除后的那条记录密码就不要了,增加的记录又生成新的密码。


删除后的那条记录密码就不要了

是今天不用了,还是永远不用了

坚守VFP最后的阵地
2015-01-10 17:49
快速回复:如何自动生成不容易重复的六位数
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029911 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved