Algoritmo para El Calculo Del Digito Ver
Algoritmo para El Calculo Del Digito Ver
Algoritmo para El Calculo Del Digito Ver
RUC Y RECIBO
La entrada son dos campos: RUC (A20), DV (A2)
el campo DV se divide en DV1 (A1) y DV2 (A1)
primero se calcula el DV1 y después el DV2
Ruc Jurídico
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 Ruc de entrada
0 0 0 0 0 1 0 1 0 2 0 0 6 4 1 0 3 4 6 2 Justificado a la
izquierda
RUC
Posiciones 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 Espacios en
0 0 0 0 0 1 0 1 0 2 0 0 6 4 1 0 3 4 6 2 blancos
reemplazar con 0.
Se reemplaza con 0.
Ruc Jurídico
2. 0 0 0 0 0 1 1 0 2 0 0 8 5 1 1 7 2 1 1 Ruc formato
antiguo
3. 0 0 0 0 6 1 3 0 2 0 0 1 4 1 2 3 4 1 1 Ruc formato
normal
Posiciones 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 Justificado a
N 0 8 2 7 4 0 0 1 2 5 la derecha
Posiciones 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 reemplazar
0 0 0 0 0 0 0 N 0 8 0 0 2 7 4 0 0 1 2 5 blancos x 0
1
Posiciones 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 Ruc
5. N 0 8 N T 0 0 1 0 0 0 2 4 Naturalizado
Posiciones 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 Ruc
7. N 0 0 P E 0 0 1 0 0 0 1 9 Panameño
Extranjero
Posiciones 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 Ruc
8. N 0 0 E 0 0 1 0 0 0 1 1 Extranjero
Posiciones 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 Ruc
9. N 0 8 P I 0 0 1 0 0 0 8 0 Panameño
Indígena
Posiciones 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 Ruc
10. N 0 8 A V 0 0 1 0 0 1 9 6 Antes de
la
Vigencia
Posiciones 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 Justificado a
N 0 8 2 7 4 3 0 1 2 5 4 la derecha
Posiciones 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 reemplazar
0 0 0 0 0 0 N 0 8 0 0 2 7 4 3 0 1 2 5 4 blancos x 0
2
Rutina de Personas Naturales y Números Tributarios.
En la persona natural (N) siempre se reemplaza la posición 7 u 8 de RUCTB con el número 5.
Para esto se pregunta si esta posición = “N”.
Ruc ejemplo 4.
0 0 0 0 0 0 0 N 0 8 0 0 2 7 4 0 0 1 2 5 Se reemplaza “N” por
el número 5.
0 0 0 0 0 0 0 5 0 8 0 0 2 7 4 0 0 1 2 5
0 0 0 0 0 0 5 0 8 0 0 2 7 4 3 0 1 2 5 3
En los Números Tributarios o Naturalizados (NT) se reemplaza la posición 11 de RUCTB (letra “N”) por el
número 4 y la posición 12 de RUCTB (letra “T”) por el número 3.
Ruc ejemplo 5.
0 0 0 0 0 0 0 N 0 8 N T 0 0 1 0 0 0 2 4 Se reemplaza “NT”
por los números 4 y 3.
0 0 0 0 0 0 0 5 0 8 4 3 0 0 1 0 0 0 2 4
Si la condición anterior no se cumple puede ser un RUC de una persona Extranjera el cual se identifica con
una “E” en la posición 11 de RUCTB (letra “E”). De cumplirse la reemplazamos por el número 5.
Ruc ejemplo 8.
0 0 0 0 0 0 0 N 0 0 E 0 0 0 1 0 0 0 1 1 Se reemplaza “E” por el
número 5.
0 0 0 0 0 0 0 5 0 8 5 0 0 0 1 0 0 0 1 1
0 0 0 0 0 0 0 5 0 0 7 5 0 0 1 0 0 0 1 9
Si la condición anterior es falsa entonces preguntamos si se trata de un RUC para Panameño Indígena
representado con las letras “PI” en las posiciones 11 y 12. De ser así reemplazamos la posición 11 (letra “P”)
por el número 7 y la posición 12 (letra “I”) por el número 9.
Ruc ejemplo 9.
0 0 0 0 0 0 0 N 0 8 P I 0 0 1 0 0 0 8 0 Se reemplaza “PI” por
los números 7 y 9.
0 0 0 0 0 0 0 5 0 8 7 9 0 0 1 0 0 0 8 0
3
De ser incierta entonces puede ser un RUC denominado Antes de la Vigencia que se identifica con una “AV” en la posición
11 y 12. De ser así reemplazamos la posición 11 de RUCTB (letra “A”) por el número 1 y la posición 12 de RUCTB (letra
“V” ) por el número 5.
Ruc ejemplo 7.
0 0 0 0 0 0 0 N 0 8 A V 0 0 1 0 0 1 9 6 Se reemplaza “AV” por
los números 1 y 5.
0 0 0 0 0 0 0 5 0 8 1 5 0 0 1 0 0 1 9 6
Si las condiciones anteriores no se cumplen quiere decir que es un ruc natural de contexto normal.
Posición 6 y 7 de RUCTB
00 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 ARR-VAL
0 1 2 3 4 5 6 7 8 9 1 2 3 4 7 8 9 2 3 4 5 6 7 8 9 ARR-DIG
Posición 6 y 7 de RUCTB
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7
Nos colocamos en la última posición del RUCTB y nos movemos de derecha a izquierda; para ello se genera un ciclo que va de mayor a menor o
sea va en decremento K-I-1 hasta que K sea igual a 1.
I = 20
4
J=2
NSUMA = 0
Nos vamos directamente a la rutina que calcula el Digito Verificador (Rutina CALCULA DV).
Por limitantes anteriores en nuestro formato de RUC (13 posiciones); utilizamos una combinación de letras y caracteres para grabar los datos del
TOMO. Este formato nos obliga a mantener en nuestro cálculo de DV el mismo dígito para los Ruc’s ya inscritos antes de efectuarse la
conversación al formato hoy existente (20 posiciones).
Por lo cual debemos manejar una condición especial de referencia cruzada en los Ruc’s antiguos que se identifican de la siguiente forma:
Si la posición 4 del RUCTB es igual al número 0 y la posición 5 es igual al número 0 y la posición 6 es menor que el número 5; indica que es un
RUC antiguo y para indicar esto encendemos un FLAG
(SW=1) y vamos a una Rutina de Referencia Cruzada, (vea el siguiente ejemplo).
Ruc ejemplo 1.
0 0 0 0 0 1 0 1 0 2 0 0 6 4 1 0 3 4 6 2
Fin de la Rutina
Ruc ejemplo 1.
0 0 0 0 0 1 0 1 0 2 0 0 6 4 1 0 3 4 6 2
0 0 0 0 0 0 1 1 0 2 0 0 6 4 1 0 3 4 6 2
Luego se procede a hacer el cálculo del segundo digito; y para esto se asignan los siguientes valores:
I = 21
5
J = 02
NSUMA = 0
Luego de calcular el segundo digito del digito verificador (DV) lo mueve a DV2, que representa el segundo digito de DV de salida.
Rutina CALCULA DV
Luego de multiplicar el peso (J) por el dígito del RUC correspondiente a la posición K, el
Resultado se acumula en NSUMA
NSUMA = NSUMA + j * RUCTB(K)
Luego a J se le suma 1.
J=J+1
RUCT DV-AUX
Posiciones 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 Ruc
Justificado a
0 0 0 0 0 1 0 1 0 2 0 0 6 4 1 0 3 4 6 2 la derecha en
RUC-T
Los Espacios en blanco se reemplazan con ceros (0).
Posiciones 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
0 0 0 0 0 1 0 1 0 2 0 0 6 4 1 0 3 4 6 2
6
Como vemos la posición 4 y 5 son 0 y la posición 6 es menor que 5 por lo que se enciende el flag SW=1
RUCTB RUCTB
Si el remanente es 0, 1 el DV calculado es = 0
RUCT DV-AUX
Posiciones 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 Ruc
Justificado a
0 0 0 0 0 1 1 0 2 0 0 8 5 1 1 7 2 1 1 la derecha en
RUC-T
Los Espacios en blanco se reemplazan con ceros (0).
7
Posiciones 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
0 0 0 0 0 0 1 1 0 2 0 0 8 5 1 1 7 2 1 1
Como vemos la posición 4 y 5 son 0 y la posición 6 es menor que 1 por lo que se enciende el flag SW=1
RUCTB RUCTB
Si el remanente es 0, 1 el DV calculado es = 0
Ejemplo # 3 para cálculo de Digito Verificador Jurídico Formato Nuevo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 Ruc de
Entrada
Posiciones 0 0 0 0 0 0 6 1 3 0 2 0 0 1 4 1 2 3 4 1
DV
Entrada
DV1 DV2
RUCTB
RUCT DV-AUX
Posiciones 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 Ruc
Justificado a
0 0 0 0 6 1 3 0 2 0 0 1 4 1 2 3 4 1 1 la derecha en RUC-T
Los Espacios en blanco se reemplazan con ceros (0).
8
Posiciones 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
0 0 0 0 0 6 1 3 0 2 0 0 1 4 1 2 3 4 1 1
RUCTB RUCTB
Si el remanente es 0, 1 el DV calculado es = 0
Ejemplo # 4 para cálculo de Digito Verificador Natural Formato Normal
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 Ruc de
Entrada
Posiciones N 0 8 2 7 4 0 0 1 2 5
DV
Entrada
DV1 DV2
RUCTB
RUCT DV-AUX
Posiciones 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 Ruc
Justificado a
9
N 0 8 2 7 4 0 0 1 2 5 la derecha en
RUC-T
Los espacios en blanco se reemplazan con ceros (0).
Posiciones 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
0 0 0 0 0 N 0 8 0 0 2 7 4 0 0 1 2 5
RUCTB RUCTB
Si el remanente es 0, 1 el DV calculado es = 0
RUCT DV-AUX
10
Posiciones 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 Ruc
Justificado a
N 0 8 2 7 4 3 0 1 2 5 3 la derecha en
RUC-T
Los espacios en blanco se reemplazan con ceros (0).
Posiciones 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
0 0 0 0 0 0 N 0 8 0 0 2 7 4 3 0 1 2 5 3
RUCTB RUCTB
Si el remanente es 0, 1 el DV calculado es = 0
11
RUCTB
RUCT DV-AUX
Posiciones 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 Ruc
Justificado a
N 0 8 N T 0 0 1 0 0 0 2 4 la derecha en
RUC-T
Los espacios en blanco se reemplazan con ceros (0).
Posiciones 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
0 0 0 0 0 0 0 N 0 8 N T 0 0 1 0 0 0 2 4
Este ruc es un Naturalizado, la posición 8 es una “N” y la
reemplazamos por el número 5, como la posición 11 y 12 “NT”
reemplazamos la posición 11 con el número 4 y la posición 12 con el número 3.
Primer DV (DV1)
RUCTB RUCTB
Si el remanente es 0, 1 el DV calculado es = 0
12
DV Entrada
DV1 DV2
RUCTB
RUCT DV-AUX
Posiciones 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 Ruc
Justificado a
0 0 0 0 8 N T 0 0 1 0 0 4 1 9 la derecha en
RUC-T
Los espacios en blanco se reemplazan con ceros (0).
Posiciones 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
0 0 0 0 0 0 0 0 0 8 N T 0 0 1 0 0 4 1 9
Este ruc es jurídico, la posición 11 es una “N” y
Primer DV (DV1)
Iª Vez IIª Vez
RUCTB RUCTB
Si el remanente es 0, 1 el DV calculado es = 0
13
Entrada
Posiciones N 0 0 P E 0 0 1 0 0 0 1 9
DV Entrada
DV1 DV2
RUCTB
RUCT DV-AUX
Posiciones 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 Ruc
Justificado a
N 0 0 P E 0 0 1 0 0 0 1 9 la derecha en RUC-T
Los espacios en blanco se reemplazan con ceros (0).
Posiciones 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
0 0 0 0 0 0 0 N 0 0 P E 0 0 1 0 0 0 1 9
Este ruc es Panameño Extranjero, la posición 8 es “N” y la
reemplazamos por el número 5, como la posición 11 y 12 “PE”
reemplazamos la posición 11 con el número 7 y la posición 12 con el numero 5.
Primer DV (DV1)
RUCTB RUCTB
Si el remanente es 0, 1 el DV calculado es = 0
14
Ejemplo # 8 para cálculo de Digito Verificador Natural Extranjero
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 Ruc de
Entrada
Posiciones N 0 0 E 0 0 1 0 0 0 1 1
DV Entrada
DV1 DV2
RUCTB
RUCT DV-AUX
Posiciones 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 Ruc
Justificado a
N 0 0 E 0 0 1 0 0 0 1 1 la derecha en
RUC-T
Los espacios en blanco se reemplazan con ceros (0).
Posiciones 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
0 0 0 0 0 0 0 N 0 0 E 0 0 0 1 0 0 0 1 1
Este ruc es Extranjero, la posición 8 es “N” y la
reemplazamos por el número 5, como la posición 11 es una “E”
la reemplazamos con el número 5.
Primer DV (DV1)
RUCTB RUCTB
15
Si el remanente es 0, ó 1 el DV calculado es = 0
RUCT DV-AUX
Posiciones 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 Ruc
Justificado a
N 0 8 P I 0 0 1 0 0 0 8 0 la derecha en
RUC-T
Los espacios en blanco se reemplazan con ceros (0).
Posiciones 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
0 0 0 0 0 0 0 N 0 8 P I 0 0 1 0 0 0 8 0
Este ruc es Extranjero, la posición 8 es “N” y la
reemplazamos por el número 5, como la posición 11 y 12 son “PI”
reemplazamos la posición 11 con el número 7 y la posición 12 con el número 9.
Primer DV (DV1)
Iª Vez IIª Vez
RUCTB RUCTB
16
Si el remanente es 0, ó 1 el DV calculado es = 0
Ejemplo # 10 para calculo de Digito Verificador Natural Antes de la Vigencia
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 Ruc de
Entrada
Posiciones N 0 8 A V 0 0 1 0 0 1 9 6
DV Entrada
DV1 DV2
RUCTB
RUCT DV-AUX
Posiciones 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 Ruc
Justificado a
N 0 8 A V 0 0 1 0 0 1 9 6 la derecha
en RUC-T
Los espacios en blanco se reemplazan con ceros (0).
Posiciones 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
0 0 0 0 0 0 0 N 0 8 A V 0 0 1 0 0 1 9 6
Este ruc Antes de la Vigencia , la posición 8 es una “N” y la
reemplazamos por el número 5, como la posición 11 y 12 son “AV”
reemplazamos la posición 11con el número 1 y la posición 12 con el número 5.
Posiciones 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 Los
espacios en
blanco
0 0 0 0 0 0 0 5 0 8 1 5 0 0 1 0 0 1 9 6 se
reemplazan
con 0.
Primer DV (DV1)
Iª Vez IIª Vez
RUCTB RUCTB
17
Si el remanente es 0, ó 1 el DV calculado es = 0
18