Cómo verificar un CIF (Código de Identificación Fiscal) y un NIF (Número de Identificación Fiscal) mediante C#. Aplicación completa de ejemplo que solicita un CIF/NIF al usuario y comprueba si es correcto en base al dígito de control (CIF) o a la letra (NIF).
- Aplicación C# para verificar NIF y CIF.
- Clase C# para verificar NIF y CIF.
- Aplicación que verifica CIF/NIF en funcionamiento.
- Descarga del código fuente completo en Visual Studio .Net Community 2019 y C# de la aplicación.
Aplicación C# para verificar NIF y CIF
Desde Visual Studio .Net crearemos un nuevo proyecto de tipo «Aplicación Windows Forms (.NET Framework):
Agregaremos los siguientes componentes al formulario principal:
El código fuente C# completo del formulario formVerificarCIFDNI.cs, que incluye el código de los botones «Verificar» para el CIF y para el NIF (DNI), será:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
using System; using System.Drawing; using System.Windows.Forms; namespace VerificarCIFDNI { public partial class formVerificarCIFDNI : Form { public formVerificarCIFDNI() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { CalculosDNICIF vCIF = new CalculosDNICIF(); bool verificado = vCIF.ValidarCIF(txtCIF.Text); if (!verificado) { lVerificadoCIF.Text = "Incorrecto"; lVerificadoCIF.ForeColor = Color.Red; } else { lVerificadoCIF.Text = "Correcto"; lVerificadoCIF.ForeColor = Color.Green; } } private void txtCIF_TextChanged(object sender, EventArgs e) { lVerificadoCIF.Text = ""; } private void btVerificarNIF_Click(object sender, EventArgs e) { CalculosDNICIF vNIF = new CalculosDNICIF(); bool verificado = vNIF.ValidarNIF(txtNIF.Text); if (!verificado) { lVerificadoNIF.Text = "Incorrecto"; lVerificadoNIF.ForeColor = Color.Red; } else { lVerificadoNIF.Text = "Correcto"; lVerificadoNIF.ForeColor = Color.Green; } } private void txtNIF_TextChanged(object sender, EventArgs e) { lVerificadoNIF.Text = ""; } } } |
Clase C# para verificar NIF y CIF
Agregaremos la clase que incluirá los métodos para verificar el NID y el CIF a nuestro proyecto, con el nombre «VerificarCIFDNI» y con el código C#:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
using System; using System.Collections.Generic; using System.Windows.Forms; namespace VerificarCIFDNI { class CalculosDNICIF { //Valida el CIF pasado como parámetro calculando su dígito de control public bool ValidarCIF(string cif) { try { int posPares = 0; int posImpares = 0; int sumaParesImpares; string ultimoCaracter; int pNumero; string[] uLetra = new string[] { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "0" }; string[] fLetra = new string[] { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J" }; int[] fLetraNum = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 }; string tmpPos; if (cif.Length < 9) return false; cif = cif.ToUpper(); ultimoCaracter = cif.Substring(8, 1); int cont = 1; for (cont = 1; cont < 7; cont++) { tmpPos = (2 * int.Parse(cif.Substring(cont++, 1))) + "0"; posImpares += int.Parse(tmpPos.ToString().Substring(0, 1)) + int.Parse(tmpPos.ToString().Substring(1, 1)); posPares += int.Parse(cif.Substring(cont, 1)); } tmpPos = (2 * int.Parse(cif.Substring(cont, 1))) + "0"; posImpares += int.Parse(tmpPos.Substring(0, 1)) + int.Parse(tmpPos.Substring(1, 1)); sumaParesImpares = posPares + posImpares; pNumero = int.Parse(sumaParesImpares.ToString().Substring(sumaParesImpares.ToString().Length - 1, 1)); pNumero = 10 - pNumero; if (pNumero == 10) pNumero = 0; if ((ultimoCaracter == pNumero.ToString()) || (ultimoCaracter == uLetra[pNumero - 1])) return true; else return false; } catch (Exception ex) { MessageBox.Show ("Error al validar CIF: " + ex.Message, "Error al validar CIF", MessageBoxButtons.OK, MessageBoxIcon.Warning); return false; } } //Obtiene la letra correspondiente al número private static string obtenerLetra(int numero) { Dictionary<int, String> letras = new Dictionary<int, string>(); letras.Add(0, "T"); letras.Add(1, "R"); letras.Add(2, "W"); letras.Add(3, "A"); letras.Add(4, "G"); letras.Add(5, "M"); letras.Add(6, "Y"); letras.Add(7, "F"); letras.Add(8, "P"); letras.Add(9, "D"); letras.Add(10, "X"); letras.Add(11, "B"); letras.Add(12, "N"); letras.Add(13, "J"); letras.Add(14, "Z"); letras.Add(15, "S"); letras.Add(16, "Q"); letras.Add(17, "V"); letras.Add(18, "H"); letras.Add(19, "L"); letras.Add(20, "C"); letras.Add(21, "K"); letras.Add(22, "E"); return letras[numero]; } //Valida el NIF pasado como parámetro //Comprueba si la letra es la correcta public bool ValidarNIF(string NIF) { if (NIF == "") return false; try { //Obtenemos la letra del NIF (el último carácter) String letra = NIF.Substring(NIF.Length - 1, 1); //Obtenemos los números del NIF NIF = NIF.Substring(0, NIF.Length - 1); //Convertimos a número int nifNum = int.Parse(NIF); int resto = nifNum % 23; string letraResto = obtenerLetra(resto); if (letraResto != letra.ToUpper()) return false; else return true; } catch (Exception ex) { MessageBox.Show("Error al validar NIF: " + ex.Message, "Error al validar NIF", MessageBoxButtons.OK, MessageBoxIcon.Warning); return false; } } } } |
Aplicación que verifica CIF/NIF en funcionamiento
Compilaremos la aplicación y comprobaremos que funciona correctamente. Introduciremos un CIF y pulsaremos el botón «Verificar» para comprobar si es correcto en función del dígito de control. Haremos lo mismo para un DNI (NIF), lo introduciremos completo (con la letra incluida), la aplicación lo validará y comprobará si la letra se corresponde:
Descarga del código fuente completo en Visual Studio .Net Community 2019 y C# de la aplicación
A continuación dejamos enlace para la descarga de esta aplicación completa de ejemplo para verificar/validar un DNI/NIF/CIF, con el código fuente incluido en C Sharp (C#):