Digito verificador escrito en plpgsql | Paraguay

Gerardo Ocampos
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.

Ejemplo descripto en wikipedia.

Gerardo Ocampos

Written by

Paraguay - RHCSA - RHCE

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade