Colombia -Dian – Digito de verificación
create or replace function verifydv(doc varchar)
returns int
language plpgsql as $$
declare
xx int:=0;
docArray text[];
sumadigitos int=0;
div float;
vpri int[]:=ARRAY[71,67,59,53,47,43,41,37,29,23,19,17,13,7,3];
begin
raise notice 'doc %',doc;
if length(trim(regexp_replace(doc,'\W','','g')))>1 and regexp_like(regexp_replace(doc,'\W','','g'),'^[\d]+$') then
raise notice 'doc1 %',doc;
select regexp_split_to_array(doc,'') into docArray;
for j in array_lower(docArray, 1) .. array_upper(docArray, 1)
loop
sumadigitos=sumadigitos::int +vpri[(cardinality(vpri)-cardinality(docArray))+j] * docArray[j]::int;
end loop;
div=sumadigitos/11;
raise notice 'sum dig %',sumadigitos;
xx=CAST(div as int);
xx=xx*11;
xx=sumadigitos-xx;
raise notice '% - %', div, xx;
if(xx>1) then
xx=11-xx;
end if;
end if;
return xx;
end;
$$;