Fuinción para calcular la letra del nif

16/12/2004 - 21:34 por JPF | Informe spam
Alguien me puede decir si hay alguna manera de calcularlo usando una única
función???
Gracias de antemano
Un saludo

Preguntas similare

Leer las respuestas

#6 KL
17/12/2004 - 22:25 | Informe spam
Hola anonimo,

La formula desde luego es valida para calcular un NIF, tal como lo pedia
JPF, y de paso tambien para calcular el NIE. Si tambien se quire calcular el
CIF se puede utilizar esta formula VBA personalizada [DigitoCIFNIF()] q he
encontrado aqui http://es.geocities.com/softcv/codigo/cif.html:

'--Inicio Codigo-
' Propósito: Calcular el Dígito de control para los:
' NIF - Número de Identificación Fiscal.
' NIE - Número Identificador de Extranjeros.
' CIF - Código de Identificación Fiscal.
'
' Entradas: Una cadena compuesta por el DNI,NIF,CIF,NIE.
'
' Devuelve: Una cadena con el Código de Control, número ó letra
' según corresponda. Si se produce un error retorna ""
'
' Requiere las funciones:
' DigitoNIF() - Calcula la letra del NIF
' DigitoCIF() - Calcula el número/letra del CIF
'
' -- http://es.geocities.com/softcv/
' -- Carlos Valencia -

Public Function DigitoCIFNIF(ByVal strCifNif As String) As String
Dim strTemp As String, strLetra As String
Dim lngTam As Long, i As Long

' iniciar y así, si salimos por algún error, que
' podamos detectarlo en la función/procedimiento de llamada
DigitoCIFNIF = ""

lngTam = Len(strCifNif)

strCifNif = UCase(strCifNif) ' convertir en mayúsculas

' quitar los espacios en blanco y los carácteres - y /
For i = 1 To lngTam
strLetra = Mid$(strCifNif, i, 1)
If strLetra = "-" Or strLetra = "/" Or strLetra = " " Then
' no hace nada - se lo salta
Else
strTemp = strTemp & strLetra ' monta la cadena letra a letra
End If
Next i

strCifNif = strTemp

' si el primer carácter es un número tratarlo como un DNI -> NIF
If IsNumeric(Mid$(strCifNif, 1, 1)) Then
DigitoCIFNIF = DigitoNIF(CLng(Val(strCifNif)))
Else ' es un CIF - NIE
' si es un NIE procesarlo como un DNI -> NIF
If Mid$(strCifNif, 1, 1) = "X" Then ' es un NIE
DigitoCIFNIF = DigitoNIF(CLng(Val(Mid$(strCifNif, 2, _
lngTam - 1))))
Else ' es un CIF
' tiene los 8 carácteres necesarios para
' la comprobación del CIF ?
If lngTam < 8 Then
MsgBox "CIF incompleto, mínimo 8 carácteres.", _
vbOKOnly + vbCritical, "ATENCIÓN"
Exit Function
Else
' comienza por alguna de las letras
' admitidas para los CIF ?
If InStr(1, "ABCDEFGHKLMNPQS", Left(strCifNif, 1)) > 0 Then
DigitoCIFNIF = DigitoCIF(strCifNif)
Else
MsgBox "La Primera letra no corresponde a un CIF.", _
vbOKOnly + vbCritical, "ATENCIÓN"
Exit Function
End If
End If
End If
End If

End Function


' Propósito: Calcular la letra del NIF
'
' Entradas: Un entero largo con el número de DNI
'
' Devuelve: Una cadena con la letra de control del NIF.
'
Private Function DigitoNIF(ByVal lngDNI As Long) As String

DigitoNIF = Mid$("TRWAGMYFPDXBNJZSQVHLCKE", _
(lngDNI Mod 23) + 1, 1)

End Function

' Propósito: Calcular el Dígito de control para los CIF
'
' Entradas: Una cadena compuesta por el CIF.
'
' Devuelve: Una cadena con el Código de Control, número y letra
' según la relación siguiente:
'
' A ó 1 B ó 2 C ó 3 D ó 4 E ó 5
' F ó 6 G ó 7 H ó 8 I ó 9 J ó 0
'
' El último dígito, que es el de control, puede contener
' la letra ó el número indistintamente, por ello la función
' retorna el par letra-número para poder comprobarlo.
'
' -- http://es.geocities.com/softcv/
' -- Carlos Valencia -

Private Function DigitoCIF(ByVal strCif As String) As String
Const conValores As String = "0246813579"
Dim i As Long, lngTemp As Long

DigitoCIF = ""
lngTemp = 0

For i = 2 To 6 Step 2
lngTemp = lngTemp + Val(Mid$(conValores, _
Val(Mid$(strCif, i, 1)) + 1, 1))
lngTemp = lngTemp + Val(Mid$(strCif, i + 1, 1))
Next i

lngTemp = lngTemp + Val(Mid$(conValores, _
Val(Mid$(strCif, 8, 1)) + 1, 1))

lngTemp = 10 - (lngTemp Mod 10)

If lngTemp = 10 Then
DigitoCIF = "J ó 0"
Else
DigitoCIF = Chr(lngTemp + 64) & " ó " & Str(lngTemp)
End If

End Function

'
' Propósito: Obtener una cadena que defina
' el tipo de documento NIF,CIF,NIE.
'
' Entradas: Una cadena compuesta por la primera letra
' del NIF,CIF,NIE.
'
' Devuelve: Una cadena con la descripción de tipo. Si no puede
' localizar el tipo de documento devuelve la cadena "ERROR"
'
' -- http://es.geocities.com/softcv/
' -- Carlos Valencia -

Public Function DescripNIFCIF(ByVal strLetra As String) As String
Dim strTipo(18) As String
Dim intIndice As Integer

strTipo(0) = "NIF - Número de Identificación Fiscal."
strTipo(1) = "A - Sociedad Anónima."
strTipo(2) = "B - Sociedad de responsabilidad limitada."
strTipo(3) = "C - Sociedad colectiva."
strTipo(4) = "D - Sociedad comanditaria."
strTipo(5) = "E - Comunidad de bienes."
strTipo(6) = "F - Sociedad cooperativa."
strTipo(7) = "G - Asociación."
strTipo(8) = "H - Comunidad de propietarios."
strTipo(9) = "K - Formato antiguo."
strTipo(10) = "L - Formato antiguo."
strTipo(11) = "M - Formato antiguo."
strTipo(12) = "N - Formato antiguo."
strTipo(13) = "P - Corporación local."
strTipo(14) = "Q - Organismo autónomo."
strTipo(15) = "S - Organo de la administración."
strTipo(16) = "X - NIE - Número Identificador de Extranjeros."
strTipo(17) = "ERROR"


If IsNumeric(strLetra) Then
intIndice = 0
Else
intIndice = InStr(1, "ABCDEFGHKLMNPQSX", strLetra, 1)
If intIndice = 0 Then
intIndice = 17
End If
End If

DescripNIFCIF = strTipo(intIndice)

End Function
'--Fin Codigo-


wrote in message
news:044501c4e468$f0ce4c40$
La fórmula que ha posteado KL sólo es valida para los dni
(que ciertamente son la mayoría) pero no recoge los cif de
las empresas, organismos oficiales, extranejros.
Si me es posible, la próxima semana postearé, en código
objeto, la rutina completa. La razón de no postear el
código fuente es que estas rutinas deben utilizarse para
COMPROBAR si es correcto el dígito de control, NO para
generarlo.



Alguien me puede decir si hay alguna manera de calcularlo


usando una única
función???
Gracias de antemano
Un saludo


.

Respuesta Responder a este mensaje
#7 KL
17/12/2004 - 22:37 | Informe spam
perdon queria decir "FUNCION VBA personalizada" no "formula VBA
personalizada".

KL

"KL" wrote in message
news:09Iwd.4446048$
Hola anonimo,

La formula desde luego es valida para calcular un NIF, tal como lo pedia
JPF, y de paso tambien para calcular el NIE. Si tambien se quire calcular
el CIF se puede utilizar esta formula VBA personalizada [DigitoCIFNIF()] q
he encontrado aqui http://es.geocities.com/softcv/codigo/cif.html:

'--Inicio Codigo-
' Propósito: Calcular el Dígito de control para los:
' NIF - Número de Identificación Fiscal.
' NIE - Número Identificador de Extranjeros.
' CIF - Código de Identificación Fiscal.
'
' Entradas: Una cadena compuesta por el DNI,NIF,CIF,NIE.
'
' Devuelve: Una cadena con el Código de Control, número ó letra
' según corresponda. Si se produce un error retorna ""
'
' Requiere las funciones:
' DigitoNIF() - Calcula la letra del NIF
' DigitoCIF() - Calcula el número/letra del CIF
'
' -- http://es.geocities.com/softcv/
' -- Carlos Valencia -

Public Function DigitoCIFNIF(ByVal strCifNif As String) As String
Dim strTemp As String, strLetra As String
Dim lngTam As Long, i As Long

' iniciar y así, si salimos por algún error, que
' podamos detectarlo en la función/procedimiento de llamada
DigitoCIFNIF = ""

lngTam = Len(strCifNif)

strCifNif = UCase(strCifNif) ' convertir en mayúsculas

' quitar los espacios en blanco y los carácteres - y /
For i = 1 To lngTam
strLetra = Mid$(strCifNif, i, 1)
If strLetra = "-" Or strLetra = "/" Or strLetra = " " Then
' no hace nada - se lo salta
Else
strTemp = strTemp & strLetra ' monta la cadena letra a letra
End If
Next i

strCifNif = strTemp

' si el primer carácter es un número tratarlo como un DNI -> NIF
If IsNumeric(Mid$(strCifNif, 1, 1)) Then
DigitoCIFNIF = DigitoNIF(CLng(Val(strCifNif)))
Else ' es un CIF - NIE
' si es un NIE procesarlo como un DNI -> NIF
If Mid$(strCifNif, 1, 1) = "X" Then ' es un NIE
DigitoCIFNIF = DigitoNIF(CLng(Val(Mid$(strCifNif, 2, _
lngTam - 1))))
Else ' es un CIF
' tiene los 8 carácteres necesarios para
' la comprobación del CIF ?
If lngTam < 8 Then
MsgBox "CIF incompleto, mínimo 8 carácteres.", _
vbOKOnly + vbCritical, "ATENCIÓN"
Exit Function
Else
' comienza por alguna de las letras
' admitidas para los CIF ?
If InStr(1, "ABCDEFGHKLMNPQS", Left(strCifNif, 1)) > 0 Then
DigitoCIFNIF = DigitoCIF(strCifNif)
Else
MsgBox "La Primera letra no corresponde a un CIF.", _
vbOKOnly + vbCritical, "ATENCIÓN"
Exit Function
End If
End If
End If
End If

End Function


' Propósito: Calcular la letra del NIF
'
' Entradas: Un entero largo con el número de DNI
'
' Devuelve: Una cadena con la letra de control del NIF.
'
Private Function DigitoNIF(ByVal lngDNI As Long) As String

DigitoNIF = Mid$("TRWAGMYFPDXBNJZSQVHLCKE", _
(lngDNI Mod 23) + 1, 1)

End Function

' Propósito: Calcular el Dígito de control para los CIF
'
' Entradas: Una cadena compuesta por el CIF.
'
' Devuelve: Una cadena con el Código de Control, número y letra
' según la relación siguiente:
'
' A ó 1 B ó 2 C ó 3 D ó 4 E ó 5
' F ó 6 G ó 7 H ó 8 I ó 9 J ó 0
'
' El último dígito, que es el de control, puede contener
' la letra ó el número indistintamente, por ello la función
' retorna el par letra-número para poder comprobarlo.
'
' -- http://es.geocities.com/softcv/
' -- Carlos Valencia -

Private Function DigitoCIF(ByVal strCif As String) As String
Const conValores As String = "0246813579"
Dim i As Long, lngTemp As Long

DigitoCIF = ""
lngTemp = 0

For i = 2 To 6 Step 2
lngTemp = lngTemp + Val(Mid$(conValores, _
Val(Mid$(strCif, i, 1)) + 1, 1))
lngTemp = lngTemp + Val(Mid$(strCif, i + 1, 1))
Next i

lngTemp = lngTemp + Val(Mid$(conValores, _
Val(Mid$(strCif, 8, 1)) + 1, 1))

lngTemp = 10 - (lngTemp Mod 10)

If lngTemp = 10 Then
DigitoCIF = "J ó 0"
Else
DigitoCIF = Chr(lngTemp + 64) & " ó " & Str(lngTemp)
End If

End Function

'
' Propósito: Obtener una cadena que defina
' el tipo de documento NIF,CIF,NIE.
'
' Entradas: Una cadena compuesta por la primera letra
' del NIF,CIF,NIE.
'
' Devuelve: Una cadena con la descripción de tipo. Si no puede
' localizar el tipo de documento devuelve la cadena "ERROR"
'
' -- http://es.geocities.com/softcv/
' -- Carlos Valencia -

Public Function DescripNIFCIF(ByVal strLetra As String) As String
Dim strTipo(18) As String
Dim intIndice As Integer

strTipo(0) = "NIF - Número de Identificación Fiscal."
strTipo(1) = "A - Sociedad Anónima."
strTipo(2) = "B - Sociedad de responsabilidad limitada."
strTipo(3) = "C - Sociedad colectiva."
strTipo(4) = "D - Sociedad comanditaria."
strTipo(5) = "E - Comunidad de bienes."
strTipo(6) = "F - Sociedad cooperativa."
strTipo(7) = "G - Asociación."
strTipo(8) = "H - Comunidad de propietarios."
strTipo(9) = "K - Formato antiguo."
strTipo(10) = "L - Formato antiguo."
strTipo(11) = "M - Formato antiguo."
strTipo(12) = "N - Formato antiguo."
strTipo(13) = "P - Corporación local."
strTipo(14) = "Q - Organismo autónomo."
strTipo(15) = "S - Organo de la administración."
strTipo(16) = "X - NIE - Número Identificador de Extranjeros."
strTipo(17) = "ERROR"


If IsNumeric(strLetra) Then
intIndice = 0
Else
intIndice = InStr(1, "ABCDEFGHKLMNPQSX", strLetra, 1)
If intIndice = 0 Then
intIndice = 17
End If
End If

DescripNIFCIF = strTipo(intIndice)

End Function
'--Fin Codigo-


wrote in message
news:044501c4e468$f0ce4c40$
La fórmula que ha posteado KL sólo es valida para los dni
(que ciertamente son la mayoría) pero no recoge los cif de
las empresas, organismos oficiales, extranejros.
Si me es posible, la próxima semana postearé, en código
objeto, la rutina completa. La razón de no postear el
código fuente es que estas rutinas deben utilizarse para
COMPROBAR si es correcto el dígito de control, NO para
generarlo.



Alguien me puede decir si hay alguna manera de calcularlo


usando una única
función???
Gracias de antemano
Un saludo


.





Respuesta Responder a este mensaje
#8 Anonimo
18/12/2004 - 09:13 | Informe spam
¡Hola!

La información del enlace tiene buena pinta, aunque tengo
dudas respecto al cálculo de los nif que comienzan por P, Q
y S y especialmente de los extranjeros. No puedo asegurarlo
sin ver papeles. En cualquier caso el número de casos sería
muy pequeño.

Aunque no es muy importante, una última aclaración. El NIF
es la denominación actual correcta en todos los casos (no
se debe hablar de cif ni de nie).



Hola anonimo,

La formula desde luego es valida para calcular un NIF, tal


como lo pedia
JPF, y de paso tambien para calcular el NIE. Si tambien se


quire calcular el
CIF se puede utilizar esta formula VBA personalizada


[DigitoCIFNIF()] q he
encontrado aqui


http://es.geocities.com/softcv/codigo/cif.html:

'--Inicio Codigo-
' Propósito: Calcular el Dígito de control para los:
' NIF - Número de Identificación Fiscal.
' NIE - Número Identificador de Extranjeros.
' CIF - Código de Identificación Fiscal.
'
' Entradas: Una cadena compuesta por el DNI,NIF,CIF,NIE.
'
' Devuelve: Una cadena con el Código de Control, número ó


letra
' según corresponda. Si se produce un error


retorna ""
'
' Requiere las funciones:
' DigitoNIF() - Calcula la letra del NIF
' DigitoCIF() - Calcula el número/letra del CIF
'
' -- http://es.geocities.com/softcv/
' -- Carlos Valencia -

Public Function DigitoCIFNIF(ByVal strCifNif As String) As


String
Dim strTemp As String, strLetra As String
Dim lngTam As Long, i As Long

' iniciar y así, si salimos por algún error, que
' podamos detectarlo en la función/procedimiento de llamada
DigitoCIFNIF = ""

lngTam = Len(strCifNif)

strCifNif = UCase(strCifNif) ' convertir en mayúsculas

' quitar los espacios en blanco y los carácteres - y /
For i = 1 To lngTam
strLetra = Mid$(strCifNif, i, 1)
If strLetra = "-" Or strLetra = "/" Or strLetra = " " Then
' no hace nada - se lo salta
Else
strTemp = strTemp & strLetra ' monta la cadena


letra a letra
End If
Next i

strCifNif = strTemp

' si el primer carácter es un número tratarlo como un DNI


-> NIF
If IsNumeric(Mid$(strCifNif, 1, 1)) Then
DigitoCIFNIF = DigitoNIF(CLng(Val(strCifNif)))
Else ' es un CIF - NIE
' si es un NIE procesarlo como un DNI -> NIF
If Mid$(strCifNif, 1, 1) = "X" Then ' es un NIE
DigitoCIFNIF = DigitoNIF(CLng(Val(Mid$(strCifNif, 2, _
lngTam - 1))))
Else ' es un CIF
' tiene los 8 carácteres necesarios para
' la comprobación del CIF ?
If lngTam < 8 Then
MsgBox "CIF incompleto, mínimo 8 carácteres.", _
vbOKOnly + vbCritical, "ATENCIÓN"
Exit Function
Else
' comienza por alguna de las letras
' admitidas para los CIF ?
If InStr(1, "ABCDEFGHKLMNPQS", Left(strCifNif,


1)) > 0 Then
DigitoCIFNIF = DigitoCIF(strCifNif)
Else
MsgBox "La Primera letra no corresponde a


un CIF.", _
vbOKOnly + vbCritical, "ATENCIÓN"
Exit Function
End If
End If
End If
End If

End Function


' Propósito: Calcular la letra del NIF
'
' Entradas: Un entero largo con el número de DNI
'
' Devuelve: Una cadena con la letra de control del NIF.
'
Private Function DigitoNIF(ByVal lngDNI As Long) As String

DigitoNIF = Mid$("TRWAGMYFPDXBNJZSQVHLCKE", _
(lngDNI Mod 23) + 1, 1)

End Function

' Propósito: Calcular el Dígito de control para los CIF
'
' Entradas: Una cadena compuesta por el CIF.
'
' Devuelve: Una cadena con el Código de Control, número y


letra
' según la relación siguiente:
'
' A ó 1 B ó 2 C ó 3 D ó 4 E ó 5
' F ó 6 G ó 7 H ó 8 I ó 9 J ó 0
'
' El último dígito, que es el de control, puede contener
' la letra ó el número indistintamente, por ello la función
' retorna el par letra-número para poder comprobarlo.
'
' -- http://es.geocities.com/softcv/
' -- Carlos Valencia -

Private Function DigitoCIF(ByVal strCif As String) As String
Const conValores As String = "0246813579"
Dim i As Long, lngTemp As Long

DigitoCIF = ""
lngTemp = 0

For i = 2 To 6 Step 2
lngTemp = lngTemp + Val(Mid$(conValores, _
Val(Mid$(strCif, i, 1)) + 1, 1))
lngTemp = lngTemp + Val(Mid$(strCif, i + 1, 1))
Next i

lngTemp = lngTemp + Val(Mid$(conValores, _
Val(Mid$(strCif, 8, 1)) + 1, 1))

lngTemp = 10 - (lngTemp Mod 10)

If lngTemp = 10 Then
DigitoCIF = "J ó 0"
Else
DigitoCIF = Chr(lngTemp + 64) & " ó " & Str(lngTemp)
End If

End Function

'
' Propósito: Obtener una cadena que defina
' el tipo de documento NIF,CIF,NIE.
'
' Entradas: Una cadena compuesta por la primera letra
' del NIF,CIF,NIE.
'
' Devuelve: Una cadena con la descripción de tipo. Si no puede
' localizar el tipo de documento devuelve la cadena "ERROR"
'
' -- http://es.geocities.com/softcv/
' -- Carlos Valencia -

Public Function DescripNIFCIF(ByVal strLetra As String) As


String
Dim strTipo(18) As String
Dim intIndice As Integer

strTipo(0) = "NIF - Número de Identificación Fiscal."
strTipo(1) = "A - Sociedad Anónima."
strTipo(2) = "B - Sociedad de responsabilidad limitada."
strTipo(3) = "C - Sociedad colectiva."
strTipo(4) = "D - Sociedad comanditaria."
strTipo(5) = "E - Comunidad de bienes."
strTipo(6) = "F - Sociedad cooperativa."
strTipo(7) = "G - Asociación."
strTipo(8) = "H - Comunidad de propietarios."
strTipo(9) = "K - Formato antiguo."
strTipo(10) = "L - Formato antiguo."
strTipo(11) = "M - Formato antiguo."
strTipo(12) = "N - Formato antiguo."
strTipo(13) = "P - Corporación local."
strTipo(14) = "Q - Organismo autónomo."
strTipo(15) = "S - Organo de la administración."
strTipo(16) = "X - NIE - Número Identificador de Extranjeros."
strTipo(17) = "ERROR"


If IsNumeric(strLetra) Then
intIndice = 0
Else
intIndice = InStr(1, "ABCDEFGHKLMNPQSX", strLetra, 1)
If intIndice = 0 Then
intIndice = 17
End If
End If

DescripNIFCIF = strTipo(intIndice)

End Function
'--Fin Codigo-


wrote in message
news:044501c4e468$f0ce4c40$
La fórmula que ha posteado KL sólo es valida para los dni
(que ciertamente son la mayoría) pero no recoge los cif de
las empresas, organismos oficiales, extranejros.
Si me es posible, la próxima semana postearé, en código
objeto, la rutina completa. La razón de no postear el
código fuente es que estas rutinas deben utilizarse para
COMPROBAR si es correcto el dígito de control, NO para
generarlo.



Alguien me puede decir si hay alguna manera de calcularlo


usando una única
función???
Gracias de antemano
Un saludo


.





.

Respuesta Responder a este mensaje
#9 Anonimo
18/12/2004 - 09:30 | Informe spam
Los dígitos de control, en este caso y en todos los demas,
SÓLO se debe calcular como comprobación, NUNCA PARA
GENERARLOS, pues lo que se pretende es evitar los errores
que se producen en las transcripciones de los datos.

Imaginemonos que sabemos el algoritmo de cálculo de los
digitos de control de las cuentas bancarias y que tenemos
los datos básicos (codigo banco, sucursal y numero de
cuenta) pero uno de los números es equivocado y generamos
los dígitos de control. Los dígitos de control serán
correctos pero la transferencia no llegará a su
destinatario correcto.

Por lo tanto, la rutina lo que debe devolver es si el
dígito de control es correcto o no. NUNCA GENERARLO.






Hola anonimo,

La formula desde luego es valida para calcular un NIF, tal


como lo pedia
JPF, y de paso tambien para calcular el NIE. Si tambien se


quire calcular el
CIF se puede utilizar esta formula VBA personalizada


[DigitoCIFNIF()] q he
encontrado aqui


http://es.geocities.com/softcv/codigo/cif.html:

'--Inicio Codigo-
' Propósito: Calcular el Dígito de control para los:
' NIF - Número de Identificación Fiscal.
' NIE - Número Identificador de Extranjeros.
' CIF - Código de Identificación Fiscal.
'
' Entradas: Una cadena compuesta por el DNI,NIF,CIF,NIE.
'
' Devuelve: Una cadena con el Código de Control, número ó


letra
' según corresponda. Si se produce un error


retorna ""
'
' Requiere las funciones:
' DigitoNIF() - Calcula la letra del NIF
' DigitoCIF() - Calcula el número/letra del CIF
'
' -- http://es.geocities.com/softcv/
' -- Carlos Valencia -

Public Function DigitoCIFNIF(ByVal strCifNif As String) As


String
Dim strTemp As String, strLetra As String
Dim lngTam As Long, i As Long

' iniciar y así, si salimos por algún error, que
' podamos detectarlo en la función/procedimiento de llamada
DigitoCIFNIF = ""

lngTam = Len(strCifNif)

strCifNif = UCase(strCifNif) ' convertir en mayúsculas

' quitar los espacios en blanco y los carácteres - y /
For i = 1 To lngTam
strLetra = Mid$(strCifNif, i, 1)
If strLetra = "-" Or strLetra = "/" Or strLetra = " " Then
' no hace nada - se lo salta
Else
strTemp = strTemp & strLetra ' monta la cadena


letra a letra
End If
Next i

strCifNif = strTemp

' si el primer carácter es un número tratarlo como un DNI


-> NIF
If IsNumeric(Mid$(strCifNif, 1, 1)) Then
DigitoCIFNIF = DigitoNIF(CLng(Val(strCifNif)))
Else ' es un CIF - NIE
' si es un NIE procesarlo como un DNI -> NIF
If Mid$(strCifNif, 1, 1) = "X" Then ' es un NIE
DigitoCIFNIF = DigitoNIF(CLng(Val(Mid$(strCifNif, 2, _
lngTam - 1))))
Else ' es un CIF
' tiene los 8 carácteres necesarios para
' la comprobación del CIF ?
If lngTam < 8 Then
MsgBox "CIF incompleto, mínimo 8 carácteres.", _
vbOKOnly + vbCritical, "ATENCIÓN"
Exit Function
Else
' comienza por alguna de las letras
' admitidas para los CIF ?
If InStr(1, "ABCDEFGHKLMNPQS", Left(strCifNif,


1)) > 0 Then
DigitoCIFNIF = DigitoCIF(strCifNif)
Else
MsgBox "La Primera letra no corresponde a


un CIF.", _
vbOKOnly + vbCritical, "ATENCIÓN"
Exit Function
End If
End If
End If
End If

End Function


' Propósito: Calcular la letra del NIF
'
' Entradas: Un entero largo con el número de DNI
'
' Devuelve: Una cadena con la letra de control del NIF.
'
Private Function DigitoNIF(ByVal lngDNI As Long) As String

DigitoNIF = Mid$("TRWAGMYFPDXBNJZSQVHLCKE", _
(lngDNI Mod 23) + 1, 1)

End Function

' Propósito: Calcular el Dígito de control para los CIF
'
' Entradas: Una cadena compuesta por el CIF.
'
' Devuelve: Una cadena con el Código de Control, número y


letra
' según la relación siguiente:
'
' A ó 1 B ó 2 C ó 3 D ó 4 E ó 5
' F ó 6 G ó 7 H ó 8 I ó 9 J ó 0
'
' El último dígito, que es el de control, puede contener
' la letra ó el número indistintamente, por ello la función
' retorna el par letra-número para poder comprobarlo.
'
' -- http://es.geocities.com/softcv/
' -- Carlos Valencia -

Private Function DigitoCIF(ByVal strCif As String) As String
Const conValores As String = "0246813579"
Dim i As Long, lngTemp As Long

DigitoCIF = ""
lngTemp = 0

For i = 2 To 6 Step 2
lngTemp = lngTemp + Val(Mid$(conValores, _
Val(Mid$(strCif, i, 1)) + 1, 1))
lngTemp = lngTemp + Val(Mid$(strCif, i + 1, 1))
Next i

lngTemp = lngTemp + Val(Mid$(conValores, _
Val(Mid$(strCif, 8, 1)) + 1, 1))

lngTemp = 10 - (lngTemp Mod 10)

If lngTemp = 10 Then
DigitoCIF = "J ó 0"
Else
DigitoCIF = Chr(lngTemp + 64) & " ó " & Str(lngTemp)
End If

End Function

'
' Propósito: Obtener una cadena que defina
' el tipo de documento NIF,CIF,NIE.
'
' Entradas: Una cadena compuesta por la primera letra
' del NIF,CIF,NIE.
'
' Devuelve: Una cadena con la descripción de tipo. Si no puede
' localizar el tipo de documento devuelve la cadena "ERROR"
'
' -- http://es.geocities.com/softcv/
' -- Carlos Valencia -

Public Function DescripNIFCIF(ByVal strLetra As String) As


String
Dim strTipo(18) As String
Dim intIndice As Integer

strTipo(0) = "NIF - Número de Identificación Fiscal."
strTipo(1) = "A - Sociedad Anónima."
strTipo(2) = "B - Sociedad de responsabilidad limitada."
strTipo(3) = "C - Sociedad colectiva."
strTipo(4) = "D - Sociedad comanditaria."
strTipo(5) = "E - Comunidad de bienes."
strTipo(6) = "F - Sociedad cooperativa."
strTipo(7) = "G - Asociación."
strTipo(8) = "H - Comunidad de propietarios."
strTipo(9) = "K - Formato antiguo."
strTipo(10) = "L - Formato antiguo."
strTipo(11) = "M - Formato antiguo."
strTipo(12) = "N - Formato antiguo."
strTipo(13) = "P - Corporación local."
strTipo(14) = "Q - Organismo autónomo."
strTipo(15) = "S - Organo de la administración."
strTipo(16) = "X - NIE - Número Identificador de Extranjeros."
strTipo(17) = "ERROR"


If IsNumeric(strLetra) Then
intIndice = 0
Else
intIndice = InStr(1, "ABCDEFGHKLMNPQSX", strLetra, 1)
If intIndice = 0 Then
intIndice = 17
End If
End If

DescripNIFCIF = strTipo(intIndice)

End Function
'--Fin Codigo-


wrote in message
news:044501c4e468$f0ce4c40$
La fórmula que ha posteado KL sólo es valida para los dni
(que ciertamente son la mayoría) pero no recoge los cif de
las empresas, organismos oficiales, extranejros.
Si me es posible, la próxima semana postearé, en código
objeto, la rutina completa. La razón de no postear el
código fuente es que estas rutinas deben utilizarse para
COMPROBAR si es correcto el dígito de control, NO para
generarlo.



Alguien me puede decir si hay alguna manera de calcularlo


usando una única
función???
Gracias de antemano
Un saludo


.





.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida