Verificación de legalidad de la tarjeta de identificación de Java y obtener información válida del número de tarjeta de identificación para su referencia. El contenido específico es el siguiente
Verificación de legalidad de la tarjeta de identificación de Java
/** Los primeros 6 dígitos de la tarjeta de identificación [ABCDEF] son códigos digitales de la división administrativa (consulte el código digital para breves) Descripción (consulte el "Código de división administrativa GB/T 2260-2007 de la República Popular de la República Popular de China"):*El principio y el análisis de estructura de la compilación de este código digital adoptan una estructura de código de seis digites de tres libras. Bajo el gobierno central, regiones administrativas especiales), * ciudades (regiones, prefecturas autónomas, ligas) y condados (condados autónomos, ciudades a nivel de condado, pancartas, pancartas autónomas, distritos municipales, áreas forestales, distritos especiales) en China según la jerarquía. El significado de la estructura del código digital del código de izquierda a derecha es: la primera capa es el código de dos dígitos AB que representa la provincia, la región autónoma, el municipio directamente bajo el gobierno central y regiones administrativas especiales; La segunda capa es el código de dos dígitos de CD que representa el código resumido del municipio, la región, la prefectura autónoma, la alianza y el municipio directamente bajo el gobierno central, y el código sumario de las divisiones administrativas a nivel del condado directamente bajo la provincia (región autónoma), entre: ―01 ~ 20, 51 ~ 70 representa la ciudad, 02 también se usa a la representación de la municipal de la municipal de la municipal de la municipal; ―21 ~ 50 representa el código resumido del distrito, prefectura autónoma, alianza; “90 representa el código de resumen de las divisiones administrativas a nivel del condado directamente bajo la provincia (región autónoma). El tercer piso son los dos dígitos EF que representan condados, condados autónomos, ciudades a nivel de condado, pancartas, pancartas autónomas, distritos municipales, áreas forestales y distritos especiales. Entre ellos: ―01 ~ 20 representa ciudades a nivel de condado con ciudades a nivel de condado bajo la jurisdicción de la ciudad, distritos (prefecturas autónomas, ligas) y ciudades a nivel de condado bajo las divisiones administrativas a nivel del condado directamente bajo la jurisdicción de la provincia (región autónoma). 01 generalmente representa el código de resumen de la jurisdicción; ―21 ~ 80 representa ciudades a nivel de condado bajo la jurisdicción de condados, condados autónomos, pancartas, pancartas autónomas, áreas forestales y distritos especiales regionales; "81 ~ 99 representa ciudades a nivel de condado bajo la jurisdicción de la provincia (región autónoma). */import java.text.parseException; import java.text.simpledateFormat; import java.util.calendar; import java.util.date; import java.util.gregorInCalendar; import java.util.hashmap; import java.util.map; import java.util.regex.pattern; * Descripción de la clase: la verificación de legalidad de la tarjeta de identificación * </p> * <p> *--15 dígitos Número de identificación: los dígitos del séptimo y octavo son el año de nacimiento (dos dígitos), los dígitos noveno y décimo de los dígitos de nacimiento, 11º y 12 ° dígitos representan la fecha de nacimiento, 15 ° dígitos representan el género, los números impares son los hombres e incluso los números son las mujeres. *--18 dígitos Número de identificación*: 7, 8, 9 y 10 son el año de nacimiento (cuatro dígitos), 11 y 12 son el mes de nacimiento, 13 y 14 representan la fecha de nacimiento, 17 representan el género, los números impares son hombres y los números incluso son mujeres. * </p> */@SuppressWarnings({ "unchecked", "unused", "all" })public class IdcardValidator { /** * Provincial, municipal code table: { 11:"Beijing", 12:"Tianjin", 13:"Hebei", 14:"Shanxi", 15:"Inner Mongolia", * 21:"Liaoning", 22: "Jilin", 23: "Heilongjiang", 31: "Shanghai", 32: "Jiangsu", * 33: "Zhejiang", 34: "Anhui", 35: "Fujian", 36: "Jiangxi", 37: "Shandong", 41: "Henan", *, * 42:"Hubei",43:"Hunan",44:"Guangdong",45:"Guangxi",46:"Hainan",50:"Chongqing", * 51:"Sichuan",52:"Guizhou",53:"Yunnan",54:"Tibet",61:"Shaanxi",62:"Gansu", * 63: "Qinghai", 64: "Ningxia", 65: "Xinjiang", 71: "Taiwan", 81: "Hong Kong", 82: "Macao", 91: "Extraño"} */ Proteged String CodeAnDcity [] [] = {{"11", "Beijing"}, {"12", "Tianjin"}}}}, "Tianjing" "13", "Hebei"}, {"14", "shanxi"}, {"15", "Mongolia interna"}, {"21", "Liaoning"}, {"22", "Jilin"}, {"23", "Heilongjiang"}, {"31", "Shangghai"}, {"32", "32", {"32", {"32", {"32". "Jiangsu"}, {"33", "zhejiang"}, {"34", "anhui"}, {"35", "fujian"}, {"36", "jiangxi"}, {"37", "shandong"}, {"41", "henan"},}, {"42", "" 4i "," "," 42 "," 42 "," "," "", "" ". }, {"43", "hunan"}, {"44", "guangdong"}, {"45", "guangxi"}, {"46", "hainan"}, {"50", "chongqing"}, {"51", "Sichuan"}, {"52", "52", "" "53", "53". "Yunnan" }, { "54", "Tibet" }, { "61", "Shaanxi" }, { "62", "Gansu" }, { "63", "Qinghai" }, { "64", "Ningxia" }, { "65", "Xinjiang" }, { "71", "Taiwan" }, {"81", "Hong Kong"}, {"82", "Macao"}, {"91", "extranjero"}}; private String cityCode[] = { "11", "12", "13", "14", "15", "21", "22", "23", "31", "32", "33", "34", "35", "36", "37", "41", "42", "43", "44", "45", "46", "50", "51", "52", "53", "54", "61", "62", "63", "64", "65", "71", "81", "82", "91"}; // cada factor de ponderación intent intent [] = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2}; // Código de verificación de 18º bits cadena privada VerifyCode [] = {"1", "0", "x", "9", "8", "7", "6", "5", "4", "3", "2"}; / ** * Verifique la legalidad de todas las tarjetas de identificación * * @param idcard * @return */ public boolean isValidatedAllIdCard (String IdCard) {if (idcard.length () == 15) {idcard = this.convertidCarby15bit (idcard); } return this.IsValidate18IdCard (idcard); } /** * <p> * Determine la legalidad de una tarjeta de identificación de 18 dígitos * </p> * Según las disposiciones sobre los números de identificación de ciudadanía en el estándar nacional GB11643-1999 de la República Popular de China, el número de identificación de la ciudadanos es un código de combinación de características, que consiste en un código digital de setenta y un código de verificación de un punto de verificación único. * La orden de disposición es de izquierda a derecha: código de dirección de seis dígitos, código de ocho dígitos de código de nacimiento, código de secuencia de tres dígitos y código de verificación de un dígito. * <p> * Código de secuencia: indica el número de secuencia asignado a las personas nacidas en el mismo año, mes y día dentro del área identificada por el mismo código de dirección. El número impar del código de secuencia se asigna a los hombres y el número incluso se asigna a las mujeres. * </p> * <p> * 1. Los primeros dígitos 1 y 2 representan: el código de la provincia; 2. El tercer y cuarto dígitos representan: el código de la ciudad; 3. Los dígitos quinto y sexto representan: el código del distrito y el condado; * 4. Los dígitos del séptimo al 14 representan: el año, mes, día de nacimiento; 5. Los dígitos 15 y 16 representan: El código de la estación de policía en la ubicación; * 6. Los dígitos 17 representan el género: los números impares representan hombres, e incluso los números representan hembras; * 7. El dígito 18 es el código de corrección de pruebas: algunos dicen que es un código de información personal, que generalmente es generado al azar por la computadora para verificar la corrección de la tarjeta de identificación. El código de calibración puede ser un número de 0 a 9, y a veces también está representado por x. * </p> * <p> * El método de cálculo del octavo dígito (código de verificación) es: 1. Multiplica el número de 17 dígitos del número de identificación anterior por diferentes coeficientes. Los coeficientes desde el primer dígito hasta el decimoséptimo dígito son: 7 9 10 5 8 4 * 2 1 6 3 7 9 10 5 5 8 4 2 * </p> * <p> * 2. Agregue el resultado de multiplicar estos números de 17 dígitos y coeficientes. * </p> * <p> * 3. Use la adición y divida por 11 para ver cuál es el resto. * </p> * 4. El resto solo puede tener 11 números 0 1 2 3 4 5 6 7 8 9 10. El número de la última tarjeta de identificación correspondiente a cada una es 1 0 x 9 8 7 6 5 4 3 * 2. * <p> * 5. Desde lo anterior, si el resto es 2, el ⅹ del numeral romano aparecerá en el dígito 18º de la tarjeta de identificación. Si el resto es 10, el último número de la tarjeta de identificación es 2. * </p> * * @param idcard * @return */ public boolean isValidate18IDCard (string idcard) {// bits no 18 son falsos if (idcard.length ()! = 18) {return false; } // Obtenga la primera cadena de 17 bits idcard17 = idcard.substring (0, 17); // Obtenga la cadena de 18 ° bit Idcard18code = idcard.substring (17, 18); char c [] = nulo; String checkcode = ""; // son todos los números if (isDigital (idcard17)) {c = idcard17.toCarArray (); } else {return false; } if (null! = c) {int bit [] = new int [idcard17.length ()]; bit = convercharToint (c); int sum17 = 0; sum17 = getPowerSum (bit); // Verifique el valor de la suma con 11 para obtener el resto para el código de verificación checkcode = getCheckCodebySum (SUM17); if (null == checkcode) {return false; } // Haga coincidir el 18º bit de la tarjeta de identificación con el código de calibración calculado. Si no es igual, es un falso if (! Idcard18code.equalsignorecase (checkcode)) {return false; }} return verdadero; } /*** Verifique la legalidad de la tarjeta de identificación de 15 bits. Este método es inexacto. Es mejor convertir de 15 a 18 bits antes de juzgar, que se ha proporcionado en esta clase. * * @param idcard * @return */ public boolean isValidate15IDCard (String IdCard) {// no-15 bits son falsos if (idcard.length ()! = 15) {return false; } // son todos los números if (isDigital (idcard)) {string provinceID = idcard.substring (0, 2); String Birthday = Idcard.substring (6, 12); int año = integer.parseInt (idcard.substring (6, 8)); int mes = Integer.ParseInt (idcard.substring (8, 10)); int day = Integer.ParseInt (idcard.substring (10, 12)); // Determinar si es una provincia legal Boolean Flag = false; for (string id: citycode) {if (id.equals (provinceID)) {flag = true; romper; }} if (! flag) {return false; } // La fecha de nacimiento de esta tarjeta de identificación es falsa después de la fecha actual Fecha de nacimiento = nulo; intente {birthdate = new SimpleDateFormat ("yymmdd"). parse (cumpleaños); } catch (ParseException e) {E.PrintStackTrace (); } if (birthdate == null || nueva fecha (). ANTES (BACINDATE)) {return false; } // para determinar si es un año legal Gregoriancalendar Curday = new Gregoriancalendar (); int curyear = Curday.get (calendario.Year); int Year2Bit = Integer.ParseInt (String.ValueOf (Curyear) .substring (2)); //} // para determinar si es un mes legal si (mes <1 || mes> 12) {return false; } // para determinar si es una fecha legal booleana mflag = false; Curday.Settime (fecha de nacimiento); // Asigna la fecha de nacimiento de esta tarjeta de identificación al objeto Curday Switch (mes) {Caso 1: Caso 3: Caso 5: Caso 7: Caso 8: Caso 10: Caso 12: MFlag = (Day> = 1 && Day <= 31); romper; Caso 2: // Hay 28 días en febrero del calendario gregoriano y 29 días en febrero del año bisiesto. if (curday.eSeapyear (curday.get (calendar.year))) {mflag = (day> = 1 && day <= 29); } else {mflag = (day> = 1 && day <= 28); } romper; Caso 4: Caso 6: Caso 9: Caso 11: MFlag = (Day> = 1 && Day <= 30); romper; } if (! mflag) {return false; }} else {return false; } return verdadero; } / ** * Convierta una tarjeta de ID de 15 dígitos a una tarjeta de identificación de 18 dígitos * * @param idcard * @return * / public string convertCarby15bit (String IdCard) {String idcard17 = null; // tarjeta de identificación no 15 bit if (idcard.length ()! = 15) {return null; } if (isDigital (idcard)) {// Obtenga la fecha del cumpleaños de la cadena de nacimiento = idcard.substring (6, 12); Fecha de nacimiento de fecha = nulo; intente {birthdate = new SimpleDateFormat ("yymmdd"). parse (cumpleaños); } catch (ParseException e) {E.PrintStackTrace (); } Calendario cday = calendar.getInstance (); cDay.SetTime (fecha de nacimiento); String Year = String.ValueOf (cday.get (calendar.year)); Idcard17 = idcard.substring (0, 6) + año + idcard.substring (8); char c [] = idcard17.toCarArray (); String checkcode = ""; if (null! = c) {int bit [] = new int [idcard17.length ()]; // convertir la matriz de caracteres en una matriz entera bit = converCharToint (c); int sum17 = 0; sum17 = getPowerSum (bit); // Obtenga el valor de suma y obtenga el resto para verificar el código CHECKCODE = GetCheckCodeBysum (SUM17); // no puede obtener el bit de verificación si (null == checkcode) {return null; } // emplome los primeros 17 dígitos con el código de verificación de 18º dígito IDCARD17 += checkcode; }} else {// La tarjeta de identificación contiene el número de retorno nulo; } return IDCard17; } / ** * Verificación básica numérica y dígito de números de tarjeta de identificación de 15 bits y 18 bits * * @param idcard * @return * / public boolean isidcard (string idcard) {return idcard == null || "" .Equals (Idcard)? falso: patrón.matches ("(^// d {15} $) | (// d {17} (?: // d | x | x) $)", idcard); } / ** * Los dígitos y dígitos básicos verifican los números de identificación de 15 dígitos * * * @param idcard * @return * / public boolean IS15IDCard (String IdCard) {return idcard == null || "" .Equals (Idcard)? falso: patrón.matches ("^[1-9] // d {7} (0 // d) | (1 [0-2])) (([0 | 1 | 2] // d) | 3 [0-1]) // d {3} $", Idcard); } / ** * Números básicos y dígitos verifica el número de identificación de 18 dígitos * * @param idcard * @return * / public boolean IS18IDCard (String IdCard) {return Pattern .matches ( "^[1-9] // d {5} [1-9] // d {3} (((0 // d) | (1 [0-2])) (([0 | 1 | 2] // d) | 3 [0-1]) // d {3} (/// d | x | x] {1}) $", Idcard); } / ** * Verificación digital * * @param str * @return * / public boolean isDigital (string str) {return str == null || "" .Equals (str)? falso: str.matches ("^[0-9]*$"); } / ** * Multiplique cada bit de la tarjeta de identificación y el factor de ponderación del bit correspondiente, y luego obtenga el valor de suma * * @param bit * @return * / public int getpowersum (int [] bit) {int sum = 0; if (power.length! = bit.length) {return sum; } for (int i = 0; i <bit.length; i ++) {for (int j = 0; j <power.length; j ++) {if (i == j) {sum = sum+bit [i] * power [j]; }}} suma de retorno; } / ** * Verifique el valor de la suma con 11 para obtener el resto del código de verificación * * @param checkcode * @param sum17 * @return check bit * / public string getCheckCodeBysum (int sum17) {String checkcode = null; Switch (Sum17 % 11) {Caso 10: checkcode = "2"; romper; caso 9: checkcode = "3"; romper; caso 8: checkcode = "4"; romper; caso 7: checkcode = "5"; romper; caso 6: checkcode = "6"; romper; caso 5: checkcode = "7"; romper; caso 4: checkcode = "8"; romper; Caso 3: checkcode = "9"; romper; caso 2: checkcode = "x"; romper; Caso 1: checkcode = "0"; romper; caso 0: checkcode = "1"; romper; } return checkscode; } / ** * Convierta una matriz de caracteres en una matriz entera * * @param c * @return * @throws numberFormateException * / public int [] converCharToint (char [] c) lanza numberFormateException {int [] a = new int [c.length]; int k = 0; for (char temp: c) {a [k ++] = integer.parseInt (string.valueOf (temp)); } return a; } public static void main (string [] args) lanza la excepción {String IDCARD15 = "142431199001145"; // String IDCARD18 = "121212121212121212121212121212"; // 18-BIT IDCARDVALIDATOR IV = New IdCardvalidator ();); System.out.println (IV.IsValidateAllidCard (IDCARD15)); System.out.println (IV.IsValidateAllidCard (IDCARD18)); }}Extraer información relacionada con la tarjeta de identificación basada en el número de tarjeta de identificación
import java.text.simpledateFormat; import java.util.calendar; import java.util.date; import java.util.gregoriancalendar; import java.util.hashmap; import java.util.map; import java.util.set;/** * <P> * Class Descripción: Información de extracto relacionado con Id card. IdCardInfoExtractor {// Provincia Private String Province; // Ciudad de cadena privada Ciudad; // Región de cadena privada del distrito y del condado; // año privado intane; // mes privado int mes; // Fecha de día privado int; // género de cadena privada de género; // Fecha de nacimiento Fecha privada Cumpleaños; Mapa privado <String, String> CityCodemap = new Hashmap <String, String> () {{this.put ("11", "Beijing"); this.put ("12", "Tianjin"); this.put ("13", "Hebei"); this.put ("14", "shanxi"); this.put ("15", "Mongolia interna"); this.put ("21", "Liaoning"); this.put ("22", "Jilin"); this.put ("23", "Heilongjiang"); this.put ("31", "Shanghai"); this.put ("32", "jiangsu"); this.put ("33", "Zhejiang"); this.put ("34", "anhui"); this.put ("35", "fujian"); this.put ("36", "jiangxi"); this.put ("37", "shandong"); this.put ("41", "henan"); this.put ("42", "Hubei"); this.put ("43", "hunan"); this.put ("44", "Guangdong"); this.put ("45", "Guangxi"); this.put ("46", "Hainan"); this.put ("50", "Chongqing"); this.put ("51", "Sichuan"); this.put ("52", "Guizhou"); this.put ("53", "yunnan"); this.put ("54", "Tíbet"); this.put ("61", "Shaanxi"); this.put ("62", "Gansu"); this.put ("63", "Qinghai"); this.put ("64", "ningxia"); this.put ("65", "xinjiang"); this.put ("71", "Taiwán"); this.put ("81", "Hong Kong"); this.put ("82", "Macao"); this.put ("91", "extranjero"); }}; Validador privado IdCardValidator = NULL; / *** Inicialice cada atributo de miembro a través de un constructor*/ public IdCardInfoExtractor (String IdCard) {try {Validator = new IdCardValidator (); if (validator.ISValidateAllidCard (idcard)) {if (idcard.length () == 15) {idcard = validator.convertidCarby15bit (idcard); } // Obtener la provincia String ProvinceId = idcard.substring (0, 2); Establecer <String> key = this.cityCodemap.KeySet (); for (string id: key) {if (id.equals (provinceID)) {this.province = this.citycodemap.get (id); romper; }} // Obtenga la cadena de género id17 = idcard.substring (16, 17); if (integer.parseInt (id17) % 2! = 0) {this.gender = "macho"; } else {this.gender = "femenino"; } // Obtenga la fecha de la cadena de nacimiento cumpleaños = idcard.substring (6, 14); Fecha de nacimiento = new SimpleDateFormat ("yyyymmdd") .Parse (cumpleaños); this.birthday = cumpleaños; Gregoriancalendar CurrentDay = new Gregoriancalendar (); día actual. this.Year = CurrentDay.get (calendario.Year); this.month = currentday.get (calendario.month) + 1; this.day = currentday.get (calendar.day_of_month); }} catch (Exception e) {E.PrintStackTrace (); }} / ** * @return la provincia * / public string getProvince () {return provincia; } / ** * @return la ciudad * / public String getCity () {return City; } / ** * @return la región * / public string getregion () {Región de retorno; } / ** * @return el año * / public int getyear () {return año; } / ** * @return el mes * / public int getMonth () {return mes; } / ** * @return el día * / public int getday () {return Day; } / ** * @return el género * / public string getGender () {return gender; } / ** * @return el cumpleaños * / fecha pública getBirthday () {regreso cumpleaños; } @Override public string toString () {return "provincia:" + this.province + ", género:" + this.gender + ", fecha de nacimiento:" + this.birthday; } public static void main (string [] args) {String idcard = "121212121212121212121212"; IdCardInfoExtractor IE = new IdCardInfoExtractor (idcard); System.out.println (ie.ToString ()); }}Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.