Sergey is right. An array would be simpler, but in any case, for the moment, maybe this would work for you. It can be simplified further with an array.
LOCAL llOk
llOk = .T.
LC = ALLTRIM(DIRETO.REG)
IF LEN(ALLTRIM(lc)) = 9
FOR lnCounter = 1 TO LEN(ALLTRIM(lc)) - 1
lcVarName = 'R' + ALLTRIM(STR(lnCounter))
&lcVarName = VAL(SUBSTR(lc,lnCounter,1))
ENDFOR
DV = VAL(SUBSTR(9,1))
Sum = (R1 * 8) + (R2 * 6) + (R3 * 4) + (R4 * 2) + (R5 * 3) + (R6 * 5) + (R7 * 9) + (R8 * 7)
REST1 = MOD(Sum, 11)
DO CASE
CASE REST1 = 0
DV1 = 5
CASE REST1 = 1
DV1 = 0
OTHER
DV1 = 11 - REST1
ENDCASE
IF DV1 # DV
llOkk = .F.
ENDIF
ELSE
llOk = .F.
ENDIF
IF !llOk
MESSAGEBOX ("invalid code")
ENDIF
>Please take a look at the code below:
>
>** the last one is the verify digit
>
>
>LN = VAL (DIRETO.REG)
> endif
>
>
>FOR lnCounter = 1 TO LEN(ALLTRIM(STR(ln)))
>lcVarName = 'lcVarName' + ALLTRIM(STR(lnCounter))
>&lcVarName = INT(VAL(substr(trans(ln),lnCounter,1)))
>ENDFOR
>
>R1 = lcVarName1
>R2 = lcVarName2
>R3 = lcVarName3
>R4 = lcVarName4
>R5 = lcVarName5
>R6 = lcVarName6
>R7 = lcVarName7
>R8 = lcVarName8
>DV = lcVarName9
>
>
>Sum = (R1 * 8) + (R2 * 6) + (R3 * 4) + (R4 * 2) + (R5 * 3) + (R6 * 5) + (R7 * 9) + (R8 * 7)
>
>REST1 = MOD(Sum, 11)
>
>DO CASE
>CASE REST1 = 0
>DV1 = 5
>CASE REST1 = 1
>DV1 = 0
>OTHER
>DV1 = 11 - REST1
>ENDCASE
>
>IF DV1 # DV
>
>= MESSAGEBOX ("invalid code")