Quisiera saber si hay alguna función para que al introducir un DNI sin letra, se genere la letra correspondiente.Si no la hay, ¿Alguien me da alguna solución para ello?
1 Respuesta
Respuesta de asturcon3
1
1
asturcon3, Ingeniero en Informatica (5 años) Ingeniero Técnico en...
Access no proporciona una rutina predefinida, pero buscando por ahí en internet encontré una en otro lenguaje que te puede servir. Function checkDocumento(doc$) As String Dim t$, p1$, p2$, p3$, l$ checkDocumento = "" If doc = "" Then Exit Function If sonDigitos(doc) Then ' DNI If Len(doc) > 8 Then checkDocumento = "Un DNI está limitado a 8 dígitos" Exit Function End If If sonDigitos(Left(doc, Len(doc) - 1)) And sonLetras(Right(doc, 1)) Then ' NIF l = Mid("TRWAGMYFPDXBNJZSQVHLCKET", Val(Left(doc, Len(doc) - 1)) Mod 23 + 1, 1) If l <> Right(doc, 1) Then checkDocumento = "La letra del NIF no es correcta, debería ser una " & l End If Exit Function End If If Len(doc) > 2 Then If sonLetras(Left(doc, 1)) And sonDigitos(Mid(doc, 2, Len(doc) - 2)) Then ' CIF Dim suma%, control%, n% p1 = Left(doc, 1) p2 = Mid(doc, 2, Len(doc) - 2) p3 = Right(doc, 1) If Len(p2) < 7 Then p2 = Right("0000000" & p2, 7) ElseIf Len(p2) > 7 Then checkDocumento = "Un CIF admite como máximo 9 caracteres" Exit Function End If If InStr("ABCDEFGHPQSKLMX", p1) < 1 Then ' letra no es correcta checkDocumento = "La letra del principio del CIF no es correcta" Exit Function End If suma = Val(Mid(p2, 2, 1)) + Val(Mid(p2, 4, 1)) + Val(Mid(p2, 6, 1)) For n = 1 To 7 Step 2 suma = suma + ((2 * Val(Mid(p2, n, 1))) Mod 10) + ((2 * Val(Mid(p2, n, 1))) \ 10) Next control = 10 - (suma Mod 10) If InStr("PS", p1) > 0 Then ' Ayuntamientos y organismos If p3 <> Chr(64 + control) Then checkDocumento = "La letra de control del CIF es incorrecto(" & Chr(64 + control) & ")" Exit Function End If Else ' Resto de tipos de CIF If control = 10 Then control = 0 If p3 <> Format(control) Then checkDocumento = "El dígito de control del CIF es incorrecto(" & control & ")" Exit Function End If End If Exit Function End If End If checkDocumento = "No se reconoce el tipo de documento" End Function Está hecha para comprobar si un dni/cif/nif es correcto, pero puedes aprovecharla para completar. Por cierto, que se supone que las letras del NIF se utilizan para comprobar que las cifras son correctas, son un checksum. Por tanto, y por recomendación encarecida de la AEAT, no se deben generar nunca letras, sino que sólo se deben comprobar las introducidas. Aunque en la práctica ya se sabe...