Convertir un DNI en RUC masivamente

Hola a toda la comunidad de mi lindo Perú, hoy veremos cómo convertir Convertir un DNI en RUC masivamente

Me explicaré un poco mejor, veremos cómo convertir un número de DNI (Ejemplo 77889900) a un número de RUC(10778899006)

Para este ejemplo NO necesitamos una conexión a internet, ya que lo haremos de acuerdo a un algoritmo

Puedes descargar el ejemplo en el siguiente link: Convertir un DNI en RUC masivamente.xlsm

Explicaré los pasos para el desarrollo

Paso 1: Entender la generación de números de RUC

Primero debemos saber que un número de RUC es único y tiene 11 dígitos y un número de DNI tiene 8 dígitos

Si queremos generar el número de RUC de un DNI (Persona natural), debemos anteponer el número 10 al número de DNI (2 dígitos + 8 dígitos = 10 dígitos)

Los números de RUC tienen 11 dígitos, entonces nos falta un dígito

Este último dígito se genera con un algoritmo matemático que podemos programar

Paso 2: Entender la lógica de creación del último dígito del N°RUC

Muy bien, entendido el paso uno, para generar el último dígito del RUC es necesario primero saber cuál es la lógica

Debes saber que el último número no es aleatorio, se hace de acuerdo a un cálculo matemático que podemos programar en Excel

Explicaremos mejor la generación del último número con un ejemplo

Tenemos el número de DNI 77889900, el número de RUC sería 1077889900X, donde X es el último número a calcular (Conocido como dígito de verificación)

Multiplicar cada dígito del RUC por una constante

Muy bien, primero debemos multiplicar cada uno de los 10 dígitos que tenemos por constantes, de la siguiente forma:

DígitoConstante
Primer dígitox 5
Segundo dígitox 4
Tercer dígitox 3
Cuarto dígitox 2
Quinto dígitox 7
Sexto dígitox 6
Séptimo dígitox 5
Octavo dígitox 4
Noveno dígitox 3
Décimo dígitox 2

Para nuestro ejemplo quedaría así:

  • 1 x 5 = 5
  • 0 x 4 = 0
  • 7 x 3 = 21
  • 7 x 2 = 14
  • 8 x 7 = 56
  • 8 x 6 = 48
  • 9 x 5 = 45
  • 9 x 4 = 36
  • 0 x 3 = 0
  • 0 x 2 = 0

Sumar las multiplicaciones calculadas en el paso previo

Ahora debemos sumar las multiplicaciones que hemos obtenido, de la siguiente forma:

Suma = 5 + 0 + 21 + 14 + 56 + 48 + 45 + 36 + 0 + 0

Suma = 225

Para nuestro ejemplo la suma es 225, vamos por buen camino

Calcular el residuo de la suma entre 11

A la suma que hemos calculado, debemos dividirla entre 11, y quedarnos con el resto o residuo

Entonces 225 / 11 = 20 con un residuo de 5

Nos quedamos con el último dígito del residuo

Tenemos que quedarnos con el último dígito del residuo obtenido, para nuestro ejemplo es un residuo de un dígito, por lo que nos quedaríamos con el mismo, es decir 5

Recordar que el máximo residuo que podemos obtener es 10, por lo que el último dígito para ese caso sería 0

Esta lógica para poder obtener el último dígito de un número de RUC puede ser aplicada a cualquier número de RUC, no necesariamente de persona natural

Ing. Luis Rojas

Paso 3: Programar la creación de funciones en VBA

Muy bien, una vez entendida la lógica con la que se crean los números de RUC, procederemos a crear dos funciones en VBA

La función ValidarRUC que nos devolverá un valor indicando si un número de RUC es correcto o no

Function ValidarRUC(RUC As String) As String
    Dim Respuesta As String, Temporal As Integer
    On Error GoTo sale
    
    If Len(RUC) <> 11 Then
        Respuesta = "Incorrecto"
    End If
    
    Temporal = Val(Left(RUC, 2))
    If Temporal <> 10 And Temporal <> 20 And Temporal <> 15 And Temporal <> 16 And Temporal <> 17 Then
        Respuesta = "Incorrecto"
    End If
    
    Dim suma As Integer, resto As Integer, complemento As Byte
    suma = Val(Mid(RUC, 1, 1)) * 5 + Val(Mid(RUC, 2, 1)) * 4 + Val(Mid(RUC, 3, 1)) * 3 + Val(Mid(RUC, 4, 1)) * 2 + Val(Mid(RUC, 5, 1)) * 7 + Val(Mid(RUC, 6, 1)) * 6 + Val(Mid(RUC, 7, 1)) * 5 + Val(Mid(RUC, 8, 1)) * 4 + Val(Mid(RUC, 9, 1)) * 3 + Val(Mid(RUC, 10, 1)) * 2
    resto = suma Mod 11
    complemento = IIf(resto = 1, 0, Val(Left(11 - resto, 1)))
    
    If Val(Mid(RUC, 11, 1)) = complemento Then
        ValidarRUC = "Correcto"
        Exit Function
    End If
sale:
    Respuesta = "Incorrecto"
    ValidarRUC = Respuesta
End Function

Y la función ConvertirDNIaRUC que permitirá convertir cualquier DNI en un número de RUC

Function ConvertirDNIaRUC(DNI As String) As String
    If Len(DNI) <> 8 Then
        ConvertirDNIaRUC = "Error en DNI"
        Exit Function
    End If
    
    Dim RUC As String
    
    Dim suma As Integer, resto As Integer, complemento As Byte
    RUC = 10 & DNI
    suma = Val(Mid(RUC, 1, 1)) * 5 + Val(Mid(RUC, 2, 1)) * 4 + Val(Mid(RUC, 3, 1)) * 3 + Val(Mid(RUC, 4, 1)) * 2 + Val(Mid(RUC, 5, 1)) * 7 + Val(Mid(RUC, 6, 1)) * 6 + Val(Mid(RUC, 7, 1)) * 5 + Val(Mid(RUC, 8, 1)) * 4 + Val(Mid(RUC, 9, 1)) * 3 + Val(Mid(RUC, 10, 1)) * 2
    resto = suma Mod 11
    complemento = IIf(resto = 1, 0, Val(Left(11 - resto, 1)))
    
    ConvertirDNIaRUC = "10" & DNI & complemento

End Function

Paso 4: Probar las funciones creadas para Convertir un DNI en RUC masivamente

He creado dos hojas en el archivo Excel para poder demostrar el uso de cada función

La función ValidarRUC nos devuelve el texto Correcto o Incorrecto de acuerdo al número de RUC que le enviamos como parámetro

Convertir un DNI en RUC masivamente

La función ConvertirDNIaRUC convierte el número de DNI que ingresemos en un número de RUC válido

Convertir DNI en RUC

Estas funciones serán muy útiles para cuando hagamos consultas masivas a SUNAT

Puedes hacer click en la siguiente imagen para descargar el archivo completamente gratis

Descargar Convertir un DNI en RUC masivamente

Recuerda que si quieres aprender a programar desde cero puedes llevar mi Curso de Excel VBA desde cero

Esta entrada tiene un comentario

  1. Bea

    Hola Luis, me ayudarías con esto, necesito hacer una planilla excel con nombre apellido, cuil, domicilio, cel y asistencia , llego hasta concatenar, pero no me sale el qr, se que algo estoy haciendo mal pero no encuentro la falla

Deja una respuesta