MySQL - Calcular letra DNI / NIE

 
Vista:
sin imagen de perfil

Calcular letra DNI / NIE

Publicado por Conrrad (2 intervenciones) el 01/11/2010 16:47:49
Estimados amigos,
Ando buscando un código que me compruebe la letra del NIF o NIE. Actualmente estoy usando un código de hace unos años pero con los NIE nuevos que empiezan por la Y no me calcula bien la letra final.

Por los foros no encuentro un código fiable y por la red me encontré este que si que tiene en cuenta los NIE nuevos pero está escrito para VisualBasic.Net y no consigo adaptarlo a VBA.

Imports System.Text.RegularExpressions

Public Function GetDcNif(ByVal nif As String) As Char

'*******************************************************************
' Nombre: GetDcNif
' por Enrique Martínez Montejo
'
' Finalidad: Devuelve la letra correspondiente al NIF o al NIE
' (Número de Identificación de Extranjero)
'
' Entradas:
' NIF: String. La cadena del NIF cuya letra final se desea
' obtener.
'
' Resultados:
' String: La letra del NIF/NIE.
'
'*******************************************************************

' Pasamos el NIF a mayúscula a la vez que eliminamos los
' espacios en blanco al comienzo y al final de la cadena.
'
nif = nif.Trim().ToUpper()

' El NIF está formado de uno a nueve números seguido
' de una letra.
'
' El NIF de otros colectivos de personas físicas, está
' formato por una letra (K, L, M), seguido de 7 números
' y de una letra final.
'
' El NIE está formado de una letra inicial (X, Y, Z),
' seguido de 7 números y de una letra final.
'
' En el patrón de la expresión regular, defino cuatro grupos en el
' siguiente orden:
'
' 1º) 1 a 8 dígitos.
' 2º) 1 a 8 dígitos + 1 letra.
' 3º) 1 letra + 1 a 7 dígitos
' 4º) 1 letra + 1 a 7 dígitos + 1 letra.
'
Try
Dim re As New Regex( _
"(^\d{1,8}$)|(^\d{1,8}[A-Z]$)|(^[K-MX-Z]\d{1,7}$)|(^[K-MX-Z]\d{1,7}[A-Z]$)", _
RegexOptions.IgnoreCase)

If (Not (re.IsMatch(nif))) Then Return Nothing

' Nos quedamos únicamente con los números del NIF, y
' los formateamos con ceros a la izquierda si su
' longitud es inferior a siete caracteres.
'
re = New Regex("(\d{1,8})")

Dim numeros As String = re.Match(nif).Value.PadLeft(7, "0"c)

' Primer carácter del NIF.
'
Dim firstChar As Char = nif.Chars(0)

' Si procede, reemplazamos la letra del NIE
' por el peso que le corresponde.
'
If (firstChar = "X"c) Then
numeros = "0" & numeros

ElseIf (firstChar = "Y"c) Then
numeros = "1" & numeros

ElseIf (firstChar = "Z"c) Then
numeros = "2" & numeros

End If

' Tabla del NIF
'
' 0T 1R 2W 3A 4G 5M 6Y 7F 8P 9D
' 10X 11B 12N 13J 14Z 15S 16Q 17V 18H 19L
' 20C 21K 22E 23T
'
' Procedo a calcular el NIF/NIE
'
Dim dni As Integer = CInt(numeros)

' La operación consiste en calcular el resto de dividir el DNI
' entre 23 (sin decimales). Dicho resto (que estará entre 0 y 22),
' se busca en la tabla y nos da la letra del NIF.
'
' Obtenemos el resto de la división.
'
Dim r As Integer = dni Mod 23

' Obtenemos el dígito de control del NIF
'
Dim dc As Char = CChar("TRWAGMYFPDXBNJZSQVHLCKE".Substring(r, 1))

Return dc

Catch
' Cualquier excepción producida, devolverá el valor Nothing.
'
Return Nothing

End Try

End Function


En enlace de este código es: http://www.mvp-access.es/softjaen/vbnet/funciones/dc/sjvbnetfun03.htm

¿Me podéis echa una mano?
Gracias por adelantado.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

RE:Calcular letra DNI / NIE

Publicado por Conrrad (2 intervenciones) el 01/11/2010 19:50:18
Perdón, no es este el foro donde debía ponerlo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar