Digito verificador escrito en plpgsql | Paraguay
Nov 2 · 2 min read
El RUC es un número que identifica a los contribuyentes que deben pagar impuestos.
Para Personas físicas: Es el número de documento de identidad seguido de un guion y el digito verificador. Ej.: 1946520–3.
Para personas jurídicas: Es un número de 8 cifras que empieza en 80000000 seguido de un guion y el digito verificador. Ej.: 80009735–1.
Pueden encontrar en el sitio oficial de la entidad recaudadora de Paraguay el código fuente en Visual Basic, PL/SQL y C.
Por mi parte, decidí hacerlo en plpgsql , lenguaje básico para DB PostgreSQL para dar un aporte a la comunidad y a los estudiantes que lo necesitan.
CREATE OR REPLACE FUNCTION dbadmin.digito_verificador(p_numero character varying, p_basemax numeric DEFAULT 11)
RETURNS numeric
LANGUAGE plpgsql
AS $function$
declare
v_total integer;
v_resto smallint;
k smallint;
v_numero_aux smallint;
v_numero_al varchar(255);
v_caracter varchar(1);
v_digit numeric;
begin
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
v_numero_al = concat(v_numero_al,ASCII(v_caracter));
else
v_numero_al = concat(v_numero_al,v_caracter);
end if;
end loop;
k = 2;
v_total = 0;
for i in reverse LENGTH(v_numero_al)..1 loop
if k > p_basemax then
k = 2;
end if;
v_numero_aux = (SUBSTR(v_numero_al, i, 1))::integer;
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;
$function$
;¿Como se usa?
SELECT dbadmin.digito_verificador('5530638');Para el cálculo se utiliza el código de control Modulo 11.

