En qué consiste el CIF (Código de Identificación Fiscal). Indicamos su estructura, lo que significa cada número y cada letra, cómo calcular el dígito de control y cómo saber a qué comunidad pertenece una empresa sabiendo su CIF. También podremos saber el tipo de empresa (sociedad anónima, sociedad limitada, comunidades de bienes, etc). Mostramos el código fuente en C Sharp (C#) para verificar un CIF.
Definición CIF
El Código de identificación fiscal (CIF) es el sistema de identificación tributaria utilizada en España para las personas jurídicas o entidades en general. Este código debe ser único para cada entidad (empresa), por ello, para que una factura tenga validez legal debe aparecer el CIF del cliente facturado y el CIF de la empresa que factura.
Estructura del CIF
X-XX-XXXXX-X
1 2 3 4 5 6 7 8 9
El CIF está compuesto de de 9 caracteres. El primero de ellos (posición 1) es una letra que define el tipo de entidad, con la siguiente correspondencia:
A | Sociedades anónimas |
B | Sociedades de responsabilidad limitada |
C | Sociedades colectivas |
D | Sociedades comanditarias |
E | Comunidades de bienes |
F | Sociedades cooperativas |
G | Asociaciones y otros tipos de sociedades civiles |
H | Comunidades de propietarios en régimen de propiedad horizontal |
N | Entidades no residentes |
P | Corporaciones locales |
Q | Organismos autónomos, estatales o no, y asimilados, y congregaciones e instituciones religiosas |
S | Órganos de la Administración del Estado y comunidades autónomas |
Los dos siguientes dígitos numéricos (posición 2, 3) identifican la provincia a la que pertenece la entidad, con la siguiente correspondencia:
01 | Álava |
02 | Albacete |
03, 53, 54 | Alicante |
04 | Almería |
05 | Ávila |
06 | Badajoz |
07, 57 | Islas Baleares |
08, 58, 59, 60, 61, 62, 63, 64 | Barcelona |
09 | Burgos |
10 | Cáceres |
11, 72 | Cádiz |
12 | Castellón |
13 | Ciudad Real |
14, 56 | Córdoba |
15, 70 | A Coruña |
16 | Cuenca |
17, 55 | Girona |
18 | Granada |
19 | Guadalajara |
20, 71 | Guipúzcoa |
21 | Huelva |
22 | Huesca |
23 | Jaén |
24 | León |
25 | Lleida |
26 | La Rioja |
27 | Lugo |
28, 78, 79, 80, 81, 82, 83, 84, 85 | Madrid |
29, 92, 93 | Málaga |
30, 73 | Murcia |
31 | Navarra |
32 | Ourense |
33, 74 | Oviedo |
34 | Palencia |
35, 76 | Las Palmas |
36, 94 | Pontevedra |
37 | Salamanca |
38, 75 | Santa Cruz de Tenerife |
39 | Cantabria |
40 | Segovia |
41, 91 | Sevilla |
42 | Soria |
43, 77 | Tarragona |
44 | Teruel |
45 | Toledo |
46, 96, 97, 98 | Valencia |
47 | Valladolid |
48, 95 | Vizcaya |
49 | Zamora |
50, 99 | Zaragoza |
51 | Ceuta |
52 | Melilla |
Los cinco siguientes dígitos (posición 4 a 8) constituyen un número correlativo de inscripción de la organización en el registro provincial.
El último dígito (posición 9) es un código de control que puede ser un número o una letra:
- Será una letra si la clave de entidad es K, P, Q ó S.
- Será un número si la clave de entidad es A, B, E ó H.
El resto de las claves de entidad: C, D, F, G, N el dígito podrá ser tanto número como letra.aa
Cálculo del dígito de control del CIF
Las operaciones para calcular el dígito de control se realizan sobre los siete dígitos centrales (posición 2 a 8) y son las siguientes:
X-X-X-X-X-X-X
1 -2 -3 -4 -5 -6 -7
- Sumar los dígitos de la posiciones pares de los siete dígitos del cálculo (posición 2, 4 y 6). Suponemos que la suma de estos números equivale a «A».
- Multiplicamos por 2 los dígitos de la posiciones impares (posición 1, 3, 5 y 7) y sumamos los dígitos del resultado de la multiplicación. Suponemos que la multiplicación equivale a «B». Por ejemplo, si la multiplicación por 2 da 18, el resultado de este dígito sería 1 + 8 = 9.
- Sumamos el resultado de las dos operaciones anteriores: A + B. Suponemos que este valor es «C».
- Tomar sólo el dígito de las unidades de C y restárselo a 10. Suponemos que este valor es D.
- A partir de este último resultado, D, se obtiene el dígito de control. Si ha de ser numérico es directamente el valor de D y si se trata
de una letra se hace una correspondencia con la siguiente relación: A = 1, B = 2, C= 3, D = 4, E = 5, F = 6, G = 7, H = 8, I = 9, J = 10.
A continuación mostramos un ejemplo para el CIF: E73467433
1. Utilizaremos los siete dígitos centrales: 7346743
2. Sumamos los dígitos pares: A = 3 + 6 + 4 = 13
3. Multiplicamos por 2 los impares:
7 * 2 = 14, sumamos 1 + 4 = 5
4 * 2 = 8, sumamos 8 + 0 = 8
7 * 2 = 14, sumamos 1 + 4 = 5
3 * 2 = 6, sumamos 6 + 0 = 6
Sumamos los resultados: B = 5 + 8 + 5 + 6 = 24
4. Sumamos A + B: C = A + B = 14 + 15 = 29
5. Para obtener D cogemos el «9» de C y a 10 le restamos este valor: D = 10 – 9 = 1
6. Con el último valor (D) ya podemos obtener el dígito de control, primero tendremos que saber si es una letra o un número, si es un número ya lo tenemos, será el 1 (el valor de D), si es una letra, teniendo en cuenta la relación: A = 1, B = 2, C= 3, D = 4, E = 5, F = 6, G = 7, H = 8, I = 9, J = 10, será una A.
Ejemplo de verificación de CIF con 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 |
//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; } } |
Ejemplo de cálculo del CIF con Visual Basic
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 |
Public Function cifDigito(cif As String) As String Dim A As Integer 'impares Dim B As Integer 'pares Dim C As Integer Dim Digito As String Dim letras As Variant A = 0 B = 0 For i = 2 To 6 Step 2 A = A + Mid(cif, i + 1, 1) 'impares C = 2 * Mid(cif, i, 1) 'pares B = B + (C Mod 10) + Int(C / 10) 'Suma de dígitos Next i B = B + ((2 * Mid(cif, 8, 1)) Mod 10) + _ Int((2 * Mid(cif, 8, 1)) / 10) C = 10 - ((A + B) Mod 10) letras = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J") Select Case (Left(cif, 1)) Case "K", "P", "Q", "S": Digito = letras(C-1) Case "A", "B", "E", "H": Digito = C Case Else: Digito = C & " o " & letras(C-1) End Select cifDigito = Digito End Function |