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;
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


0