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ígito | Constante |
---|---|
Primer dígito | x 5 |
Segundo dígito | x 4 |
Tercer dígito | x 3 |
Cuarto dígito | x 2 |
Quinto dígito | x 7 |
Sexto dígito | x 6 |
Séptimo dígito | x 5 |
Octavo dígito | x 4 |
Noveno dígito | x 3 |
Décimo dígito | x 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

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

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

Recuerda que si quieres aprender a programar desde cero puedes llevar mi Curso de Excel VBA desde cero
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