410521a 发表于 2009-8-30 20:41:58

帮我看看这代码哪里有问题`老是写入不到INI

#include<file.au3>
DIM $NAME,$AREA
if not _FileReadToArray("姓名.TXT",$NAME) THEN
        MSGBOX(4096,"错误","读取文件“姓名.TXT”时发生错误!")
        Exit
EndIf
if not _FileReadToArray("行政代码.TXT",$AREA) THEN
        MSGBOX(4096,"错误","读取文件“行政代码.TXT”时发生错误!")
        Exit
EndIf
$line = "[身份证]" & @crlf
FOR $X = 1 TO 500
        $m = StringStripWS(StringStripCR($NAME,1)]),12)   ;;取随机姓名
        if stringlen($m) > 6 or stringlen($m) < 4 then ContinueLoop         ;;姓名不为两或三个字则ContinueLoop
        $areastr = StringStripWS(StringStripCR($AREA,1)]),12);;取随机地区代码
        if stringlen($areastr) <> 6 then ContinueLoop                     ;;地区代码不为六位则ContinueLoop
        $mon = Random(1,12,1)   ;取随机月
        IF $MON = 2 THEN   ;;如果随机月为二月,则随机日最大取28,否则最大30
                $YNTWO = 28
        ELSE
                $YNTWO = 30
        ENDIF
        IF STRINGLEN($mon) = 1 THEN        $mon = "0" & $mon    ;;如果随机月为一位字符则前面补零
        $day = Random(1,$ynTWO,1)    ;;;取随机日
        IF STRINGLEN($day) = 1 THEN        $day = "0" & $day
        $SERIAL = Random(01,99,1);;取随机顺序码
        IF STRINGLEN($SERIAL) = 1 THEN$SERIAL = "0" & $SERIAL
        $GERDER = RANdom(1,9,1);;取随机性别
        $BODY =$areastr & Random(1970,1987,1) & $mon & $day & $SERIAL & $GERDER   ;身份证前十七位本体码
        $line = $line & $x & "=" & $m & "," & $BODY & MAKECHECKCODE($BODY) & @crlf
NEXT
if not _FileCreate("east_bar.ini") Then
                MSGBOX(4096,"错误","创建文件“EAST_BAR.INI”时发生错误!")
                Exit
EndIf
if not filewrite("east_bar.ini",$line) Then
                MSGBOX(4096,"错误","写入文件“EAST_BAR.INI”时发生错误!")
EndIf
Exit

;;;本函数为身份证号码校验码生成函数
;;;调用方式MAKECHECKCODE($ID),$ID为身份证号码前十七位,失败返回-1,成功则返回校验码
FUNC MAKECHECKCODE($iD)
IF STRINGLEN($id) <> 17 THEN RETURN -1
LOCAL $W1,$code,$A,$sum = 0,$y,$checkcode
$W1 = 7
$W1 = 9
$W1 = 10
$W1 = 5
$W1 = 8
$W1 = 4
$W1 = 2
$W1 = 1
$W1 = 6
$W1 = 3
$W1 = 7
$W1 = 9
$W1 = 10
$W1 = 5
$W1 = 8
$W1 = 4
$W1 = 2
$code = 1
$code = 0
$code = "x"
$code = 9
$code = 8
$code = 7
$code = 5
$code = 5
$code = 4
$code = 3
$code = 2
for $I = 1 to stringlen($id)
        $A[$I] = STRINGMID($id,$I,1)
        $SUM = $sum + $A[$I] * $w1[$I]
NEXT
$y = MOD ($sum,11)
$checkcode = $code[$y + 1]
return $checkcode
ENDFUNC

顽固不化 发表于 2009-8-30 21:56:29

本帖最后由 顽固不化 于 2009-8-30 21:58 编辑

错在For循环中姓名与地区码的那些判断上。当选为固定值时他是正确运行的。请检查姓名库与地区码库,主要是他们的数据结构,你的自己拆取方法是否正确。
[身份证]
1=张三,510112198304142945
2=张三,510112198010113429
3=张三,510112198701077164
4=张三,51011219800102642x
5=张三,510112197711239513
6=张三,510112198407058667
7=张三,510112197203303873
8=张三,510112197202088285
9=张三,510112198202059359

410521a 发表于 2009-8-31 12:36:46

姓名.txt

茅美慧
夏俊佑
陈镇玉
潘雅贞
叶庭兴
王尚雨
吴凯文
黄筱桂
吴湖白
施雪昌
李建珊
卞雅雯


行政代码.txt


110000
110100
110101
110102
110103
110104
110105
110106
110107
110108
110109
110111
110112
110113
110114
110115

顽固不化 发表于 2009-8-31 13:28:15

For $X = 1 To 500
        $m = StringStripWS($NAME, 1)], 3) ;;取随机姓名
        If StringLen($m) > 3 Or StringLen($m) < 2 Then ContinueLoop ;;姓名不为两或三个字则ContinueLoop
        $areastr = StringStripWS($AREA, 1)], 3) ;;取随机地区代码
        If StringLen($areastr) <> 6 Then ContinueLoop ;;地区代码不为六位则ContinueLoopfor后面的两个判断修正了一下。

410521a 发表于 2009-8-31 14:48:44

谢谢`   可以是可以了` 但是我不明白`

sxd 发表于 2009-9-1 02:37:36

真佩服你们能看懂别人代码的人啊
页: [1]
查看完整版本: 帮我看看这代码哪里有问题`老是写入不到INI