jueves, 17 de noviembre de 2011

Calcular el Dígito Verificador de Paraguay con Power Builder

Con este material les mostrare una función de como calcular el dígito verificador de un numero de RUC o CI paraguyo, el script es original de www.set.gov.py y adapte para que pueda funcionar en power builder, asi que espero que les sea útil. Bueno crearemos una función que se llame por ejemplo fn_calcular_dv() Return type: integer Parámetros: 1. Pass by: value, Type: string, Name: vruc 1. Pass by: value, Type: integer, Name: vbase_max
// Funcion para calcular el digito verificador de un ruc - py
// @author en PL/SQL: www.set.gov.py
// @author en Power Builder: Robert Galeano Fernandez - @rgfpy
/**
  PARAMETROS
  Arg1(string): vruc: numero de cedula o numero de ruc sin dv
  Arg2(integer): vbase_max: numero max que puede obtener el digito verificador
  Return: retorna el numero de digito verificador
*/

double vnuevo_ruc_aux = 0
double vresto
long i1
long k = 2
string vnuevo_ruc
string vletra_ruc
integer vdigito

// generamos nuevo ruc, comprobamos si el caracter obtenido es numerico o string si es string convertimos en su valor ascii
FOR i1 = 1 to len(vruc)
  vletra_ruc = upper(mid(vruc,i1,1))

  IF not (vletra_ruc >= "0" and vletra_ruc <= "9") then
    vnuevo_ruc += string(asc(vletra_ruc))
  ELSE
    vnuevo_ruc += vletra_ruc
  END IF
NEXT

// generamos el nuevo numero de ruc aux partiendo en orden DESC de acuerdo al nuevo ruc generado, tomando cada letra en el ciclo y multiplicarlo por el acumulador k
FOR i1 = len(vnuevo_ruc) to 1 step -1
  IF k > vbase_max then k = 2
  vnuevo_ruc_aux += integer(mid(vnuevo_ruc,i1,1)) * k
  k += 1
NEXT

// obtener el resto de la division de vnuevo_ruc_aux entre 11
vresto = mod(vnuevo_ruc_aux, 11)

// si el resto es mayor a 1 restamos con 11 sino igualamos a 0
IF vresto > 1 then
  vdigito = 11 - vresto
ELSE
  vdigito = 0
END IF

return vdigito

No hay comentarios.:

Publicar un comentario