
Verificar el CUIT/CUIL (Argentina)
Visual Basic
Publicado el 9 de Abril del 2002 por Jose Antonio
47.998 visualizaciones desde el 9 de Abril del 2002
Este es el codigo para el digito verificado, para chequear el CUIT/CUIL en Argentina. Tiene la rutina en el Módulo DigitoVerificador para poderlo agregar en cualquier programa. Permite ingresar los datos en formato "99-99999999-9" (13 digitos) o" 99999999999" (11 digitos). Devuelve el CUIT/CUIL con guioines.
Comentarios sobre la versión: Versión 1 (19)
donde dice:
resultado = sumador Mod 11
resultado = 11 - resultado 'saco el digito verificador
DEBE DECIR:
resultado = sumador Mod 11
If resultado <> 0 Then
resultado = 11 - resultado 'saco el digito verificador
End If
No se puede obviar el modulo con un if cuando es cero, porque si da 11 entonces el CUIT/Cuil no res correcto.
La AFIP usa al comienzo de la clave:
20 unipersonal hombre
27 unipersonal mujer
30 empresas (de hecho,S.R.L.,S.A. etc.
Cuando se asigna el CUIL/CUIL y el digito verificador da 10 o mas se reemplaza el comienzo de la clave por:
23 unipersonal hombre
28 unipersonal mujer
33 empresas (de hecho,S.R.L.,S.A. etc.
Ejemplo:
Documento unipersonal hombre
21886766
CUIT: 20-21886766-X
Si uso 20 de identificacion me da a dar un digito verificador mayor o igual a 10 (en este caso el resultado del digito verificador seria 10 y NO SIRVE)
Se reemplaza el 20 por 23 y da
CUIT 23-21886766-9 (da digito verificador 9)
Espero que sirve de ejemplo y no estropees el codigo porque va a salir cuaquier verdura.
Jose Bascoy
27-22297864-0 de Patricia Cona que no supera la validacion
habra que conseguir mas datos de como calcular o salvar los CUIT o CUIL comenzados en 27 o 33
VERIFICACION DE CUIT/CUIL (genérico)
El CUIL consta de 11 números. Los 10 primeros (2 + 8)
constituyen el código de identificación y el último, el
dígito de verificación. Para obtener esta verificación se
procede de la siguiente forma: A cada dígito del código, se
lo multiplica por los siguientes números (respectivamente)
5, 4, 3, 2, 7, 6, 5, 4, 3, 2 y cada valor obtenido, se suma
para obtener una expresión (que llamaremos "valor 1". A
este "valor 1", se le saca el resto de la división
entera a 11. Se obtiene de esta forma un número (del 0 al
10) (que llamamos "valor 2"). Sacamos la diferencia entre
11 y el "valor 2", y obtenemos un valor comprendido entre 1
y 11 (llamémosle "valor 3"). Si "valor 3"=11, el código
verificador es cero. Si "valor 3"=10, el código verificador
es 9. En cualquier otro caso, el código verificador es
"valor 3".
Ejemplo numérico con un número de CUIT, que es 20-17254359-7.
2 0 1 7 2 5 4 3 5 9
x
5 4 3 2 7 6 5 4 3 2
------------------------------------------------
10 + 00 + 03 + 14 + 14 + 30 + 20 + 12 + 15 + 18 = 136
v1 = 136
136 mod 11 = 4
v2 = 4
11 - 4 = 7
v3 = 7 => Código de verificación es siete.
El digito verificador debe ser exacto ( de 0 a 9) no se puede reemplazar cuando da 10 por 9 porque no es valido. En el caso del comentario de Pablo con el cuit o cuil comenzando en 27, hay que reemplazarlo por 28, porque asi lo determina la DGI. Para todo cuit o cuil que no de el digito verificador hay un reemplazo (comentario que lo explica mas abajo). El 33 es reemplazo del 30.
PD. No sabía nada de VB, je je je .
Gracias.
La rutina está bien, excepto por un pequeño error en el cálculo de digito verificador.
donde dice:
resultado = 11 - resultado 'saco el digito verificador
corrijanlo por:
resultado = (11 - resultado) Mod 11
y listo.... el muchacho se olvidó de hacer un último Mod.... a cualquiera le podría pasar che!!!!!
con 27 si da un numero de un solo digito.
Saludos
José Boscoy sostiene, que en los casos en que el dígito verificador calculado con tu formula da > a 9(puede del 10 u 11), se debe reemplazar los primeros 2 dígitos del cuit. En los hombres 20 por 23, personas jurídicas 30 por 33. Teniendo en cuenta que el afectado es el segundo dígito, el cual es multiplicado por 4 en la fórmula, resulta que en estos dos casos el Sumador, se incrementa en 3*4=12. Esto produce que al dividirlo por 11, el resto aumente en 1, o sea que el muevo dígito verificador calculado baje en 1. Estimado José Boscoy, esto sirve solo para el dígito 10 que es el que usaste en el ejemplo. Cuando la fórmula calcule un dígito 11, solo le resta 1 y seguirá dando incompatible. Pará el CUIT de dama la suplantación debería ser de 27 a 30 y no a 28 para obtener el mismo resultado. Por lo tanto la corrección de la AFIP, para el dígito 10, es totalmente equivalente a la que propone PABLO, reemplazando el dígito 10 por el 9.
¿Qué pasa cuando la fórmula calcula el dígito 11?
Nelson es el primero en señalar que cuando el resto de la división es 0, o sea el dígito 11, se debe reemplazar por 0.
Y el 4 de Julio de 2002, Pablo descubrió la corrección correcta :
Si "valor 3"=11, el código
verificador es cero. Si "valor 3"=10, el código verificador
es 9. En cualquier otro caso, el código verificador es
"valor 3".
La confirma Jorge el 24/9/2002:Solucione el error de 11 y 10 con :"si resultado=11 resultado=0 si resultado=10 resultado=9.
Alcanza con agregar, luego de:
resultado = 11- resultado 'saco el digito verificador
las siguientes dos lineas:
If resultado = 11 Then: resultado = 0 'Cuando el resto de la división es 0
If resultado =10 Then : resultado = 9 'Cuando el resto de la división es 1
Estimado Lucho: que no te valide el CUIT que comienza en 24 debe ser bueno, pues a mi entender,
NO existen cuits que comienzan en 24.
Estimado Matías Freire, creo que el pequeño error, que podría pasar a cualquiera, te está pasando a vos. Por favor revisá tu corrección.
POR ÚLTIMO Estimado hirass. El onceavo dígito del CUIT (dígito verificador), sirve para saber, que cuando tipeas, los 10 primeros dígitos,no te equivocaste en ninguno. Esto es válido, para cualquier número por arbitrario que sea, pues el último dígito se calcula en base a los anteriores(tanto por la AFIP, como por el uso de esta Función). Mucha gente se equivoca al tipear, y el error de emitir una factura con un cuit incorrecto puede costar caro.