FoxPro/Visual FoxPro - Calcular digito verificador!!

   
Vista:

Calcular digito verificador!!

Publicado por Juan Martinez (35 intervenciones) el 22/07/2009 04:58:36
Que tal amigos...tengo un codigo que esta como para sql pero como no entiendo mucho sobre eso alguien me podria decir donde varia para foxpro9??
es un procedimiento que calcula el digito verificador del RUC paraguayo...
les dejo el codigo: gracias!!!!

CREATE OR REPLACE FUNCTION Pa_Calcular_Dv_11_A (
p_numero IN VARCHAR2,
p_basemax IN NUMBER DEFAULT 11)
RETURN NUMBER IS
/*
Calcula Digito Verificador numérico con entrada alfanumérica y basemax 11
*/
v_total NUMBER(6);
v_resto NUMBER(2);
k NUMBER(2);
v_numero_aux NUMBER(1);
v_numero_al VARCHAR2(255);
v_caracter VARCHAR2(1);
v_digit NUMBER;
BEGIN
-- Cambia la ultima letra por ascii en caso que la cedula termine en letra
FOR i IN 1 .. LENGTH(p_numero) LOOP
v_caracter := UPPER(SUBSTR(p_numero,i,1));
IF ASCII(v_caracter) NOT BETWEEN 48 AND 57 THEN -- de 0 a 9
v_numero_al := v_numero_al || ASCII(v_caracter);
ELSE
v_numero_al := v_numero_al || v_caracter;
END IF;

END LOOP;
-- Calcula el DV
k := 2;
v_total := 0;

FOR i IN REVERSE 1 .. LENGTH(v_numero_al) LOOP
IF k > p_basemax THEN
k := 2;
END IF;
v_numero_aux := TO_NUMBER(SUBSTR(v_numero_al,i,1));
v_total := v_total + (v_numero_aux * k);
k := k + 1;
END LOOP;

v_resto := MOD(v_total,11);

IF v_resto > 1 THEN
v_digit := 11 - v_resto;
ELSE
v_Digit := 0;
END IF;

RETURN v_Digit;

END;
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Mauricio

Calcular digito verificador!!

Publicado por Mauricio (1367 intervenciones) el 22/07/2009 16:12:16
Amigo, busca el foro apropiado para este codigo!!!!!!!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Calcular digito verificador!!

Publicado por Juan Martinez (35 intervenciones) el 22/07/2009 17:39:19
La pregunta esta dirigida a los que conocen un poco de sql y trabajan con foxpro.. ahora.....que tu no lo sepas ya es otra historia ok? pero de igual maneras gracias por el comentario..aunque no fue de mucha ayuda..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauricio

Calcular digito verificador!!

Publicado por Mauricio (1367 intervenciones) el 22/07/2009 23:51:35
Facil es decirlo mas no comprobarlo, GRACIAS POR NADA
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Calcular digito verificador!!

Publicado por Pablo (Argentina) (433 intervenciones) el 23/07/2009 14:17:41
Hola Amigo, mira la verdad que de lo que escribistes arriba no entiendo nada, pero por ahi de ayuda te puedo decir que busques en la seccion de Codigo Fuente un proyecto que dice CUIT (cuit, aca en la argentina es para verificar si la clave tributaria del cliente es correcta o no) y esto se hace usando el digito verificador, o sea son 11 digitos y se calcula el digito verificador y se obtiene si esta bien o no ¿me explico?. esta todo echo en VFP 6 o 8 no dice bien pero la cuestion es que lo vas a entender mejor que lo de arriba y por ahi si le cambias algo te sirve para lo que vos queres.

Suerte!!!! y si no lo encontras, avisame y te lo paso por aca.

Pablo - Argentina
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Calcular digito verificador!!

Publicado por Juan Martinez (35 intervenciones) el 23/07/2009 16:06:44
Gracias amigo pablo..la diferencia en paraguay es que los R.U.C.(Registro unico del contribuyente)son de este formato 80029507-2.. el objetivo mio es calcular ese digitor verificador "2" apartir de los 8 digitos anteriores... busco lo que me recomendaste y te aviso si me sirvio..gracias!.. ah...lo de arriba esta en la pagina de la SET de nuestro pais
link: http://www.set.gov.py/pset/hgxpp001?6,18,273,O,S,0,PAG;CONC;287;4;D;370;1;PAG;SRC;257
;0;181151;N;SRC;MNU;E;103;5;MNU;,

pero no hay para foxpro y es eso lo q busco..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Calcular digito verificador!!

Publicado por Arnald Ruben Gomez (1 intervención) el 01/03/2013 19:28:39
esta seria la soucion:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
* Calcula Digito Verificador numérico con entrada alfanumérica y basemax 11 *
p_numero     = ALLTRIM(thisform.txt_idcliente.Value)
p_basemax    = 11
v_total      = 0
v_resto      = 0
k            = 0
v_numero_aux = 0
v_numero_al  = '' 
v_caracter   = ''
v_digit      = 0
 
* Cambia la ultima letra por ascii en caso que la cedula termine en letra
TRY
	FOR i = 1 TO LEN(p_numero)
		v_caracter = UPPER(SUBSTR(p_numero,i,1))
		IF ASC(v_caracter) < 48 OR ASC(v_caracter) > 57 && de 0 a 9
			v_numero_al = v_numero_al+ASC(v_caracter)
		ELSE
			v_numero_al = v_numero_al+v_caracter
		ENDIF
	ENDFOR
	** Calcula el DV
	k       = 2
	v_total = 0
 
	FOR i = LEN(v_numero_al)  TO 1 STEP -1
		IF k > p_basemax THEN
			k = 2
		ENDIF
		v_numero_aux = VAL(SUBSTR(v_numero_al,i,1))
		v_total      = v_total + (v_numero_aux * k)
		k            = k + 1
	ENDFOR
 
	v_resto = MOD(v_total,11)
 
	IF v_resto > 1 THEN
		v_digit = 11 - v_resto
	ELSE
		v_Digit = 0
	ENDIF
 
	thisform.txt_dv.Value = v_Digit
	thisform.l_dv = v_Digit
CATCH TO E1
	thisform.txt_dv.Value = ''
	thisform.l_dv = ''
ENDTRY
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de José Acuña

Calcular digito verificador!!

Publicado por José Acuña (1 intervención) el 12/03/2013 12:27:09
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
*
* consultarDV.prg
*
* Derechos Reservados (c) 2000-2009 José Acuña
* Villa Elisa, Paraguay
*
* Descripción:
* Calcula el dígito verificador del RUC.
*
* Historial de Modificación:
* Enero 03, 2009	Creación del Programa
*
PARAMETERS tcRUC
 
LOCAL lnDV AS INTEGER
lnDV = calcular(tcRUC, 11)
 
RETURN (lnDV)
 
*------------------------------------------------------------------------------*
FUNCTION calcular
   PARAMETERS tcNumero, tnBaseMax
 
   LOCAL lcNumeroAl, i, lcCaracter, k, lnTotal, lnNumeroAux, lnResto, lnDigito
 
   lcNumeroAl = ""
 
   FOR i = 1 TO LEN(tcNumero)
      lcCaracter = UPPER(SUBSTR(tcNumero, i, 1))
 
      IF !BETWEEN(ASC(lcCaracter), 48, 57) THEN   && de 0 a 9
         lcNumeroAl = lcNumeroAl + ALLTRIM(STR(ASC(lcCaracter)))
      ELSE
         lcNumeroAl = lcNumeroAl + lcCaracter
      ENDIF
   ENDFOR
 
   k = 2
   lnTotal = 0
 
   FOR i = LEN(lcNumeroAl) TO 1 STEP -1
      IF k > tnBaseMax THEN
         k = 2
      ENDIF
 
      lnNumeroAux = VAL(SUBSTR(lcNumeroAl, i, 1))
      lnTotal = lnTotal + (lnNumeroAux * k)
      k = k + 1
   ENDFOR
 
   lnResto = MOD(lnTotal, 11)
 
   IF lnResto > 1 THEN
      lnDigito = 11 - lnResto
   ELSE
      lnDigito = 0
   ENDIF
 
   RETURN (lnDigito)
ENDFUNC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar