各位,我想自动生成一个数据库来练习,请问:如何用随机函数生成随机的姓名呢?在VFP中,用的是GBK还是GB2312呢?
请各位高手赐教!!!
---------------------------------------------------------------
*用gb2312吧,因为gbk有空白区,用随机可能产生无用的代码
RAND(VAL(SYS(2))) &&种子,只用一次就可以了.
FOR i=1 TO 10
? name_rand()
ENDFOR
RETURN
*更好的方法是把百家姓建立一个表,第一个字应该从这个表随机出.
FUNCTION name_rand()
*第一位0xB0 - 0xF7 71个 第二位0xA0 - 0xFE 94个
LOCAL bitone,bittwo,lcresult
lcresult=""
FOR ln_i=1 TO 3 &&三个字的名.
bitone=INT(RAND()*71+1) &&产生1-71
IF bitone>71
bitone=71
ENDIF
bittwo=INT(RAND()*94+1) &&产生1-94
IF bittwo>94
bittwo=94
ENDIF
lcresult=lcresult+CHR(0xaf+bitone)+CHR(0x9f+bittwo)
ENDFOR
RETURN lcresult
ENDFUNC
---------------------------------------------------------------
*既然练习用,就用一级汉字,常用一些,第一字节用176 to 215,第二字节用161 to 254
C1_B=176 &&第一个字节的开始ANSI值
C1_E=215 &&第一个字节的结束ANSI值
C2_B=161 &&第二个字节的开始ANSI值
C2_E=254 &&第二个字节的结束ANSI值
FOR I=1 TO 10 &&取出10个姓名
?CHR(INT((C1_E-C1_B+1)*RAND()+C1_B))+CHR(INT((C2_E-C2_B+1)*RAND()+C2_B))
??CHR(INT((C1_E-C1_B+1)*RAND()+C1_B))+CHR(INT((C2_E-C2_B+1)*RAND()+C2_B))
??CHR(INT((C1_E-C1_B+1)*RAND()+C1_B))+CHR(INT((C2_E-C2_B+1)*RAND()+C2_B))
ENDFOR
---------------------------------------------------------------
或者建一个存有常用汉字的表,不用多,就100个就够了。
然后随机取进行组合就可以。
这样出来的名字比较好认。