Esta es la que yo uso:
PARAMETERS cCuit1
cA=VAL(LEFT(cCuit1,1))
cB=VAL(LEFT(RIGHT(cCuit1,12),1))
c1=VAL(LEFT(RIGHT(cCuit1,10),1))
c2=VAL(LEFT(RIGHT(cCuit1,09),1))
c3=VAL(LEFT(RIGHT(cCuit1,08),1))
c4=VAL(LEFT(RIGHT(cCuit1,07),1))
c5=VAL(LEFT(RIGHT(cCuit1,06),1))
c6=VAL(LEFT(RIGHT(cCuit1,05),1))
c7=VAL(LEFT(RIGHT(cCuit1,04),1))
c8=VAL(LEFT(RIGHT(cCuit1,03),1))
c9=RIGHT(cCuit1,1)
nSuma=(cA*5)+(cB*4)+(c1*3)+(c2*2)+(c3*7)+(c4*6)+(c5*5)+(c6*4)+(c7*3)+(c8*2)
nResto=MOD(nSuma,11)
IF nResto=0
cVeri="0"
ELSE
IF (11-nResto) < 10
cVeri=STR(11-nResto,1)
ELSE
cVeri="9"
ENDIF
ENDIF
IF cVeri<>c9
WAIT WIND "EL DIGITO VERIFICADOR DEL CUIT INDICA QUE EL MISMO NO ES CORRECTO."
retu .f.
ELSE
retu .t.
ENDIF