Clase CIF. Práctica Programación

package galia_kalchevska; /** * @author GALIA * @version 1.0 */ public class CIF extends Identificador { private static final long serialVersionUID = 6372032327748335325L; /* identificador del tipo de organismo */ private static String letras_validas = "ABCDEFGHJPQRSUV"; /* Caracteres de control */ private static String caracteres_de_control = "JABCDEFGHI"; /* tipos donde el carácter de control tiene que ser una letra */ private static String tipo_de_letra = "PQS"; /* tipos donde el carácter de control tiene que ser un nombre */ private static String tipo_de_nombre = "ABEH"; public CIF(String id) { super(id); } @Override public boolean validar() { return validar(this.getId()); } /** * Si CIF es de tipo "PQS" el carácter de control ha de ser letra. Si CIF es * de tipo "ABEH" el carácter de control ha de ser nombre. Para el resto 1 - * Sumar los dígitos en posiciones paralelas. Esto nos da A 2 - Por cada una * de les posiciones impares, multiplicarlas por 2 y sumar los dígitos de * los resultados. Da B. 3 - Sumar C = A + B 4 - Se toma el último dígito de * C y se resta de 10. Esto nos da D. Si D es = a un dígito de control, el * CIF es correcto. * * Ejemplo(fuente Wikipedia) * * CIF A08123456 1) A = 8 + 2 + 4 = 14 2) B = (0*2=0 + 1*2=2 + 3*2=6 + * 5*2=10=1+0=1) = 0+2+6+1 = 8 3) C = 14 + 8 = 22 4) Si C = 22 el Último * dígito es = 2. D es = restamos: 10 - 2 = 8 no es correcto Equivalencias * entre DC con letra y DC con numero : J=0 - A=1 - B=2 - C=3 - D=4 - E=5 - * F=6 - G=7 - H=8 - I=9 */ public static boolean validar(String id) { boolean resultado = false; int digito_de_control; try { /* Un CIF tiene que tener nueve dígitos */ if (id.length() == 9) { /* Toma la primera letra del CIF */ char letra_CIF = id.charAt(0); /* Comprueba si la primera letra del CIF es válida */ if (letras_validas.indexOf(letra_CIF) >= 0) { if (Character.isDigit(id.charAt(8))) { digito_de_control = Character.getNumericValue(id .charAt(8)); if (tipo_de_letra.indexOf(letra_CIF) >= 0) digito_de_control = 100; } else { digito_de_control = caracteres_de_control.indexOf(id .charAt(8)); if (tipo_de_nombre.indexOf(letra_CIF) >= 0) digito_de_control = 100; } int a = 0, b = 0, c = 0; byte[] impares = { 0, 2, 4, 6, 8, 1, 3, 5, 7, 9 }; /* Calcula A y B. */ for (int t = 1; t <= 6; t = t + 2) { /* Suma los pares */ a = a + Character.getNumericValue(id.charAt(t + 1)); b = b + impares[Character.getNumericValue(id .charAt(t))]; } b = b + impares[Character.getNumericValue(id.charAt(7))]; /* Calcula C */ c = 10 - ((a + b) % 10); /* Compara C con los dígitos de control */ resultado = (c == digito_de_control); } } } catch (Exception e) { resultado = false; } return resultado; } /** * Función que devuelve la descripción correspondiente al tipo de organismo * del CIF de la instancia actual.Retorna String con la descripción * correspondiente. */ public String tipo_organismo_CIF() { return tipo_organismo_CIF(this.getId()); } /** * Devuelve la descripción correspondiente al tipo de organismo de un CIF * dado. A - Sociedad anónima B - Sociedad de responsabilidad limitada C - * Sociedad colectiva D - Sociedad comunitaria E - Comunidad de bienes F - * Sociedad cooperativa G - Asociación H - Comunidad de propietarios J - * Sociedades civiles, con o sin personalidad jurídica P - Corporación Q * -Organismo público R - Congregaciones e instituciones religiosas S - * Órgano de la Administración del Estado y de las Comunidades Autónomas U - * Uniones temporales de Empresas V - Otros tipos no definidos en el resto * de claves */ public static String tipo_organismo_CIF(String id) { /* El resultado final */ String resultado_final; /* Tipo de organismo */ String tipo_Organismo[] = { "CIF tipo A", "CIF tipo B", "CIF tipo C", "CIF tipo D", "CIF tipo E", "CIF tipo F", "CIF tipo G", "CIF tipo H", "CIF_no_ definido", "CIF tipo J", "CIF_no_definido", "CIF_no_definido", "CIF_no_definido", "CIF_no_definido", "CIF_no_definido", "CIF tipo P", "CIF tipo Q", "CIF tipo R", "CIF tipo S", "CIF tipo U", "CIF tipo V", "CIF_no_definido", "CIF_no_definido", "CIF_no_definido", "CIF_no_definido" }; if (validar(id) != true) { /* CIF no válido */ resultado_final = "CIF no valido"; } else { /* CIF valido */ char letraCIF = id.charAt(0); /* Prueba la primera letra */ if (letras_validas.indexOf(letraCIF) < 0) { /* La letra no se corresponde con ninguna en la lista */ resultado_final = "CIF incorrecto"; } else { /* Busca el CIF en el array de organismos públicos */ resultado_final = tipo_Organismo[(byte) letraCIF - (byte) 'A']; } } return resultado_final; } /* Cambia el DC del CIF a letra */ public void setDCLetra() { /* si la cadena con el CIF tiene 9 dígitos */ if (this.getId().length() == 9) { if (tipo_de_nombre.indexOf(this.getId().charAt(0)) < 0) { if (Character.isDigit(this.getId().charAt(8))) { int digito_de_control = Character.getNumericValue(this .getId().charAt(8)); this.setId(this.getId().substring(0, 8) + caracteres_de_control.charAt(digito_de_control)); } } } } /* Cambia el DC del CIF a nombre. */ public void setDCNombre() { if (this.getId().length() == 9) { if (tipo_de_letra.indexOf(this.getId().charAt(0)) < 0) { if (Character.isLetter(this.getId().charAt(8))) { int digito_de_control = this.getId().charAt(8); this.setId(this.getId().substring(0, 8) + caracteres_de_control.indexOf(digito_de_control)); } } } } }
Determina como ha de ser el CIF. Formato español.

Be the first to comment

You can use [html][/html], [css][/css], [php][/php] and more to embed the code. Urls are automatically hyperlinked. Line breaks and paragraphs are automatically generated.