Como validar un campo

David Chacon
18 de Agosto del 2005
Me explico, tengo un campo dentro de un formulario en el cual que se ingresa el Rut (numero unico nacional, en Chile el nombre que tiene el numero de cedula de identidad es Rut), para que el rut sea correcto usa un digito verificador que se asigna mediante una funcion matematica, me consegui el codigo para validar que el numero que se ingresa es correcto , pero el problema que tengo es que nose donde ingresar ese codigo para que me lo valide, el numero tiene la siguiente estructura xx.xxx.xxx - X, donde X (mayusculas) es el digito verificador y el codigo que lo verifica es el siguiente:

FUNCTION Val_Rut
PARAMETERS rut,digver
STORE 0 TO suma
STORE 2 TO j
Largo = LEN(rut)

FOR i = Largo TO 1 STEP -1
Dig = VAL(SUBSTR(rut,i,1))
suma = suma + (Dig * j)
IF j = 7
j = 1
ENDIF
j = j + 1
ENDFOR
RESTO = MOD(suma,11)
DO CASE
CASE RESTO = 0
dv = 0
CASE RESTO = 1
dv = "K"
IF digver = "k" OR digver = "K"
* WAIT 'RUT INCORRECTO!!!' WINDOWS
RETURN .F.
ENDIF
RETURN .T.
OTHERWISE
dv = 11 - RESTO
ENDCASE
IF digver == ALLTRIM(STR(dv))
RETURN .T.
ELSE
* WAIT 'RUT INCORRECTO!!!' WINDOWS
RETURN .F.
ENDIF
ENDFUNC

Trate de colocarlo en la opcion valid del campo rut, pero me sale "Los metodos y eventos no pueden contener procedimientos o definiciones de clases anidadas". Ahora se me ocurre que a lo mejor tengo que crear 2 cuadros de textos, uno para el numero y otro para el digito verificador.
De antemano muchisimas gracias, estoy un poco urgido con esto ya que lo tengo que entregar luego por lo que cualquier ayuda sirve.
Gracias

sgomez
18 de Agosto del 2005
Guardáte todo este codigo en un prg que se llame Val_Rut.prg y en el valid de un objeto text en un formulario en el que el operador ingresa el numero podés poner:

if !val_rut(parametro1,parametro2)
messagebox("rut incorrecto")
return 0
endif

PARAMETERS rut,digver
STORE 0 TO suma
STORE 2 TO j
Largo = LEN(rut)

FOR i = Largo TO 1 STEP -1
Dig = VAL(SUBSTR(rut,i,1))
suma = suma + (Dig * j)
IF j = 7
j = 1
ENDIF
j = j + 1
ENDFOR
RESTO = MOD(suma,11)
DO CASE
CASE RESTO = 0
dv = 0
CASE RESTO = 1
dv = "K"
IF digver = "k" OR digver = "K"
* WAIT 'RUT INCORRECTO!!!' WINDOWS
RETURN .F.
ENDIF
RETURN .T.
OTHERWISE
dv = 11 - RESTO
ENDCASE
IF digver == ALLTRIM(STR(dv))
RETURN .T.
ELSE
* WAIT 'RUT INCORRECTO!!!' WINDOWS
RETURN .F.
ENDIF