El CIF (Código de Identificación Fiscal) es un elemento de identificación administrativa para organizaciones y consta de 9 dígitos:
_ _ _ _ _ _ _ _ _ |_| |_|_|_|_|_|_|_| |_| ^ ^ ^ ^ | |_ Números _| | | | | Dígito de control, un número ó letra: | {Aó1,Bó2,Có3,Dó4,Eó5,Fó6,Gó7,Hó8,Ió9,Jó0} | Letra de tipo de Organización, una de las siguientes: {A,B,C,D,E,F,G,H,K,L,M,N,P,Q,S}
El primer dígito es una letra que indica el tipo de la organización y puede ser una de los siguientes:
- A – Sociedad Anónima.
- B – Sociedad de responsabilidad limitada.
- C – Sociedad colectiva.
- D – Sociedad comanditaria.
- E – Comunidad de bienes.
- F – Sociedad cooperativa.
- G – Asociación.
- H – Comunidad de propietarios.
- K – Formato antiguo.
- L – Formato antiguo.
- M – Formato antiguo.
- N – Formato antiguo.
- P – Corporación local.
- Q – Organismo autónomo
- S – Organo de la administración.
Los siete dígitos siguientes son números y el último es el dígito de control que puede ser un número ó una letra.
Las operaciones para calcular el dígito de control se realizan sobre los siete dígitos centrales. Vamos a ver qué operaciones son y como podemos implementarlas con Javascript:
- Sumar los dígitos de la posiciones pares. La suma la dejaremos en una primera variable A
- Para cada uno de los dígitos de la posiciones impares, multiplicarlo por 2 y sumar los dígitos del resultado.Acumular el resultado en la variable B.
El código que utilizamos para este primer paso es sencillo. El acceso al número del CIF lo realizamos mediante el uso de la función substr tanto para los números pares como para los impares.
// Sumamos los A y B
a = 0;
b = 0;
var calculo = new Array(0,2,4,6,8,1,3,5,7,9);
for(x=2;x<=6;x+=2) {
a = a + parseInt(cif.substr(x,1));
b = b + calculo[parseInt(cif.substr(x-1,1))];
}
b = b + calculo[parseInt(cif.substr(x-1,1))];
Para los números impares hemos visto que hay que hacer alguna cosa adicional (multiplicarlos por dos y sumar los dígitos). Como esto nos puede resultar costoso de programar, utilizamos un pequeño truco. Y es que dado un número, en un array cargamos su resultado.
Así tenemos el siguiente array:
var calculo = new Array(0,2,4,6,8,1,3,5,7,9);
Y por qué el array es así. Pues es el resultado del cálculo expresado anteriormente:
0 x 2 = 0 1 x 2 = 2 2 x 2 = 4 3 x 2 = 6 4 x 2 = 8 5 x 2 = 10; 1 + 0 = 1 6 x 2 = 12; 1 + 2 = 3 7 x 2 = 14; 1 + 4 = 5 8 x 2 = 16; 1 + 6 = 7 9 x 2 = 18; 1 + 8 = 9
- Sumamos A + B = C
- Tomar sólo el dígito de las unidades de C y restárselo a 10. Esta resta nos da D.
El código de esta última acción sería el siguiente:
d = (10 -(c%10));
- A partir de D ya se obtiene el dígito de control. Si ha de ser numérico es directamente D y si se trata de una letra se corresponde con la relación:
A = 1, B = 2, C = 3, D = 4, E = 5, F = 6, G = 7, H = 8, I = 9, J = 0
Veamos como ejemplo para el número de C.I.F. : A58818501
Utilizamos los siete dígitos centrales = 5881850
Sumamos los dígitos pares: A = 8 + 1 + 5 = 14
Posiciones impares:
5 * 2 = 10 -> 1 + 0 = 1
8 * 2 = 16 -> 1 + 6 = 7
8 * 2 = 16 -> 1 + 6 = 7
0 * 2 = 0 -> = 0
Sumamos los resultados: B = 1 + 7 + 7 + 0 = 15
Suma parcial: C = A + B = 14 + 15 = 29
El dígito de las unidades de C es 9. Se lo restamos a 10 y nos da: D = 10 - 9 = 1
Si el dígito de control ha de ser un número es 1 y si ha de ser una letra es la "A"