Código para verificar validez nif empresas.

Aprovecho, una vez más para felicitarte, por la brillantez y claridad en tus respuestas.
Ahí va mi pregunta: ¿Dispones de un código que verifique si los 9 dígitos entrados como NIF de una empresa española constituyen un código correcto o, por el contrario, es erróneo?.
La verdad, no sé si esto es posible, pero la Agencia Tributaria dispone de él puesto que en sus aplicaciones si introduces mal los datos de un NIF de empresa te avisa: sin embargo he efectuado bastantes llamadas y no ha habido forma de que me lo quieran facilitar.
Si lo consiguiera solucionaría bastantes problemas que tenemos ahora por introducción errónea (a veces intencionada) del NIF de empresas clientes y proveedoreas.
Respuesta
1
Supongo que los "NIF" son códigos o números de identificación de empresa ante algún organismo recaudador de impuestos por ejemplo. (Como verás, no soy de España, por tanto no tengo tal rutina)
Estos códigos suelen tener un algoritmo interno de cálculo para determina el último dígito a partir de las otras cifras que tuviese.
Si se consiguiese el mecanismo de cálculo de tal número puede realizarse una función en Visual basic que lo calcule.
Por ejemplo esta es una que desarrollé para otro usuario que me proporcioné el algoritmo mencionado. Tal vez tengas suerte y sea el mismo que se utiliza para el NIF (pero es un disparo en la oscuridad).
Si quieres probarlo, activa el editor de Visual Basic (presiona Alt+F11), inserta un nuevo módulo ("Insertar", "´Modulo") y pega el siguiente código:
Public Function ConvNumer(Numero)
Application.Volatile
SumaDigs = 0
NumTmp = Trim(Str(Numero))
UltDig = Len(NumTmp)
DigAct = 1
M_fact = 2
'Calcula suma de factores
Do
dig = Val(Mid(NumTmp, UltDig - DigAct + 1, 1))
Res1 = Format(dig * M_fact, "00")
Res1 = Val(Left(Res1, 1)) + Val(Right(Res1, 1))
SumaDigs = SumaDigs + Res1
DigAct = DigAct + 1
M_fact = Val(IIf(DigAct Mod 2 = 0, 1, 2))
Loop While DigAct <= UltDig
'suma cifras de resultado final
UltDig = Len(SumaDigs)
DigAct = 1
Do
dig = Val(Mid(SumaDigs, UltDig - DigAct + 1, 1))
ConvNum1 = ConvNum1 + dig
DigAct = DigAct + 1
Loop While DigAct <= UltDig
If ConvNum1 > 9 Then ConvNum1 = Val(Left(Format(ConvNum1, "00"), 1)) + Val(Right(Format(ConvNum1, "00"), 1))
ConvNumer = ConvNum1
'MsgBox SumaDigs & "=" & ConvNum1
End Function
Cierra el editor de Visual Basic.
Luego coloca el numero de NIF sin el último dígito -si este fuese el verificador- en una celda (digamos D8). En otra celda ingresa esta fórmula:
=ConvNumer(D8)
Esta es la función que ingresaste en el VBE, y toma
El primer dígito contando de derecha a izquierda lo tiene que multiplicar por dos el segundo por uno y así sucesivamente, si la multiplicación da un numero de dos dígitos se tiene que descomponer y sumarlo (po ejemplo si el resultado de la multiplicación es 21 se tiene que hacer 2+1 entonces el numero (resultado) es 3) el resultado de todas las multiplicaciones se suma y al igual si sale un numero de 2 dígitos descomponerlo para quedarnos con un solo dígito.
Una acotación final, los dígitos verificadores entraron en desuso al aumentar la disponibilidad de recursos en los equipos de computación. Actualmente los chequeos de existencia se hacen sobre bases de datos. Existe la posibilidad que el ente correspondiente disponga de una base de contribuyentes para que la bajes de su sitio y efectúes los controles de existencia sobre ella.
Quizás no te resuelva el problema pero probablemente te orientará. Nota que no me diste todos los datos necesarios para resolverlo...;)
Un gran abrazo!
Fernando

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas