Verificação da legalidade do cartão de identificação Java e obtenha informações válidas do número do cartão de identificação para sua referência. O conteúdo específico é o seguinte
Verificação de legalidade do cartão de identificação Java
/** Os primeiros 6 dígitos do cartão de identificação [ABCDEF] são códigos digitais de divisão administrativa (consulte o código digital para curta duração) (consulte o Código de Divisão Administrativa "GB/T 2260-2007 do Registro do Povo do CHINA (Sixercits Hierchings, o Código do Código Digital do Código Digital adota um três dicas de três localizações) Municípios diretamente sob o governo central, regiões administrativas especiais), * cidades (regiões, prefeituras autônomas, ligas) e condados (municípios autônomos, cidades em nível de condado, banners, banners autônomos, distritos municipais, áreas florestais, distritos especiais) na China de acordo com a hierarquia. O significado da estrutura de código de código digital da esquerda para a direita é: a primeira camada é o código de dois dígitos AB que representa a província, região autônoma, município diretamente sob o governo central e regiões administrativas especiais; A segunda camada é um código de dois dígitos do CD que representa o código resumido do município, região, prefeitura autônoma, aliança e município diretamente sob o governo central, e o código de resumo da divisões administrativas do condado também é o que é mais importante da cidade, entre os quais: 01 ~ 20, 51 ~ 70 em 70 reprimentos (região autônoma), entre: 01 ~ 20, 51 ~. diretamente sob o governo central; ―21 ~ 50 representa o código resumido do distrito, prefeitura autônoma, aliança; ―90 representa o código resumido das divisões administrativas no nível do condado diretamente sob a provincial (região autônoma). O terceiro andar são os dois dígitos da EF que representam municípios, condados autônomos, cidades em nível de condado, faixas, banners autônomos, distritos municipais, áreas florestais e distritos especiais. Entre eles: “01 ~ 20 representa cidades em nível de condado com cidades no nível do condado sob a jurisdição da cidade, distritos (prefeituras autônomas, ligas) e cidades em nível de condado sob as divisões administrativas em nível do condado diretamente sob a jurisdição da província (região autônoma). 01 geralmente representa o código de resumo da jurisdição; ―21 ~ 80 representa cidades no nível do condado sob a jurisdição de condados, condados autônomos, faixas, banners autônomos, áreas florestais e distritos especiais regionais; 81 ~ 99 representa cidades no nível do condado sob a jurisdição da província (região autônoma). */importar java.text.parseException; importar java.text.simpledEformat; importar java.util.calendar; importar java.util.date; importar java.util.gregiancalendar; importação java.util.hashmap; import java.util.Map; * Descrição da aula: Verificação da legalidade do cartão de identificação * </p> * <p> *--15 dígitos Número de identificação: 7º e 8º dígitos são o ano de nascimento (dígitos duplos), o 9º e o 10º dígitos são o mês de nascimento, 11º e 12º dígitos representam a data de nascimento, 15º dígitos representam o gênero, os números ímpares são males e até fêmeas. *--18 Número de identificação de dígitos*: 7, 8, 9 e 10 são o ano de nascimento (quatro dígitos), 11 e 12 são o mês de nascimento, 13 e 14 representam a data de nascimento, 17 representam o gênero, os números ímpares são do sexo masculino e os números pares são do sexo feminino. * </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, 41, "" "36:" 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: "estranho"} */ protegido string codeAndcity [] [] = {{"11" "" "" "}}" beijing "} */ proteged string codeAndcity [] [] = {{" 11 "" "" ""}}} "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", "estrangeiro"}}; 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 fator de ponderação privado int power [] = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 9, 10, 5, 8, 8, 4, 2}; // Código de verificação do 18º bit Private String verifyCode [] = {"1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"}; / ** * Verifique a legalidade de todos os cartões de identificação * * @param idcard * @return */ public boolean isValidatedallidcard (string idcard) {if (idcard.length () == 15) {idcard = this.convertidcarby15bit (idcard); } return this.isvalidate18idcard (IDCARD); } /** * <p> * Determine a legalidade de um cartão de identificação de 18 dígitos * </p> * de acordo com as disposições sobre números de identificação de cidadania no nacional nacional GB11643-1999 da República Popular da China, o número de identificação de cidadania é um código de combinação, constituído de um código de seteteen-digit. * O pedido de arranjo é da esquerda para a direita: código de endereço de seis dígitos, data do código de nascimento de oito dígitos, código de sequência de três dígitos e código de verificação de um dígito. * <p> * Código de sequência: indica o número da sequência atribuído a pessoas nascidas no mesmo ano, mês e dia na área identificadas pelo mesmo código de endereço. O número ímpar do código de sequência é atribuído aos homens e o número par é atribuído às mulheres. * </p> * <p> * 1. Os primeiros 1 e 2 dígitos representam: o código da província; 2. Os 3º e 4º dígitos representam: o código da cidade; 3. Os 5º e 6º dígitos representam: o código do distrito e do condado; * 4. O 7º ao 14º dígitos representam: o ano, mês, dia de nascimento; 5. Os 15º e 16º dígitos representam: o código da delegacia no local; * 6. Os 17º dígitos representam gênero: números ímpares representam machos, e os números até representam mulheres; * 7. O 18º dígito é o código de revisão: alguns dizem que é um código de informação pessoal, que geralmente é gerado aleatoriamente pelo computador para verificar a correção do cartão de identificação. O código de calibração pode ser um número de 0 a 9 e, às vezes, também é representado por x. * </p> * <p> * O método de cálculo do décimo oitavo dígito (código de verificação) é: 1. Multiplique o número de 17 dígitos do número de identificação anterior por diferentes coeficientes. Os coeficientes do primeiro dígito ao décimo sétimo dígito são: 7 9 10 5 8 4 * 2 1 6 3 7 9 10 5 8 4 2 * </p> * <p> * 2. Adicione o resultado da multiplicação desses números e coeficientes de 17 dígitos. * </p> * <p> * 3. Use a adição e divida por 11 para ver qual é o restante? * </p> * 4. O restante pode ter apenas 11 números 0 1 2 3 4 5 6 7 8 9 10. O número do último cartão de identificação correspondente a cada um é 1 0 x 9 8 7 6 5 4 3 * 2. Se o restante for 10, o último número do cartão de identificação é 2. } // Obtenha os primeiros 17 bits String IdCard17 = Idcard.substring (0, 17); // Obtenha a string de 18º bit IDCARD18CODE = IDCARD.SUBSTRING (17, 18); char c [] = nulo; String checkCode = ""; // são todos números se (isDigital (IDCARD17)) {c = IdCard17.toCharArray (); } else {return false; } if (null! = c) {int bit [] = new int [idcard17.length ()]; bit = converchartoint (c); int sum17 = 0; sum17 = getpowersum (bit); // Verifique o valor da soma com 11 para obter o restante do código de verificação CHECHCODE = getCheckCodeBysum (SUM17); if (null == checkcode) {return false; } // corresponde ao 18º bit do cartão de identificação com o código de calibração calculado. Se não for igual, é um falso se (! IdCard18Code.equalSignorecase (CheckCode)) {return false; }} retornar true; } /*** Verifique a legalidade do cartão de identificação de 15 bits. Este método é impreciso. É melhor converter de 15 a 18 bits antes de julgar, o que foi fornecido nesta classe. * * @param idcard * @return */ public boolean isvalidate15idcard (string idcard) {// bits não-15 são falsos se (idcard.length ()! = 15) {return false; } // são todos números se (isDigital (IDCARD)) {String ProvinceId = Idcard.substring (0, 2); String aniversário = idcard.substring (6, 12); int ano = integer.parseint (idcard.substring (6, 8)); int mês = integer.parseint (idcard.substring (8, 10)); int dia = integer.parseint (idcard.substring (10, 12)); // determinar se é uma bandeira booleana da província legal = false; for (string id: citycode) {if (id.equals (província)) {flag = true; quebrar; }} if (! Flag) {return false; } // A data de nascimento deste cartão de identificação é falsa após a data atual da data de nascimento = nulo; tente {birthdate = new SimpleDateFormat ("yymmdd"). parse (aniversário); } catch (parseException e) {e.printStackTrace (); } if (birthdate == null || new date (). Antes (data de nascimento)) {return false; } // Para determinar se é um ano legal GregorianCalendar Curday = New GregoriaNCalendar (); int curyear = curtay.get (calendar.year); int year2bit = integer.parseint (string.valueof (curyear) .substring (2)); //} // para determinar se é um mês legal se (mês <1 || mês> 12) {return false; } // Para determinar se é uma data legal boolean mflag = false; curtay.setTime (data de nascimento); // atribui a data de nascimento deste cartão de identificação ao interruptor do curta -se do objeto (mês) {Caso 1: Caso 3: Caso 5: Caso 7: Caso 8: Caso 10: Caso 12: Mflag = (dia> = 1 && dia <= 31); quebrar; Caso 2: // Há 28 dias no calendário gregoriano e 29 dias em fevereiro do ano bissexto. if (curtay.isleapyear (curtay.get (calendar.year))) {mflag = (dia> = 1 && dia <= 29); } else {mflag = (dia> = 1 && dia <= 28); } quebrar; Caso 4: Caso 6: Caso 9: Caso 11: MFLAG = (dia> = 1 && dia <= 30); quebrar; } if (! mflag) {return false; }} else {return false; } retornar true; } / ** * Converta um cartão de identificação de 15 dígitos em um cartão de identificação de 18 dígitos * * @param idcard * @return * / public string convertidCarby15bit (string idcard) {string idcard17 = null; // cartão de identificação não-15 bits if (idcard.length ()! = 15) {return null; } if (isDigital (IDCARD)) {// Obtenha a data da sequência de nascimento aniversário = idcard.substring (6, 12); Data de nascimento = nulo; tente {birthdate = new SimpleDateFormat ("yymmdd"). parse (aniversário); } catch (parseException e) {e.printStackTrace (); } Calendário cday = calendar.getInstance (); cday.setTime (data de nascimento); String ano = string.valueof (cday.get (calendário.year)); idcard17 = idcard.substring (0, 6) + ano + idcard.substring (8); char c [] = idcard17.toCharArray (); String checkCode = ""; if (null! = c) {int bit [] = new int [idcard17.length ()]; // converte a matriz de caracteres em um bit de matriz inteiro = converchartint (c); int sum17 = 0; sum17 = getpowersum (bit); // Obtenha o valor da soma e obtenha o restante para verificar o código CHECKCODE = getCheckCodeBysum (SUM17); // não pode obter o bit de verificação se (null == checkcode) {return null; } // Splique os primeiros 17 dígitos com o código de verificação de 18 dígitos IDCARD17 += CheckCode; }} else {// O cartão de identificação contém o número de retorno null; } retornar IDCARD17; } / ** * Verificação numérica básica e de dígitos de números de cartões de identificação de 15 e 18 bits * * @param idcard * @return * / public boolean iSidcard (string idcard) {return idcard == null || "" .Equals (Idcard)? False: Pattern.Matches ("(^// d {15} $) | (// d {17} (?: // d | x | x) $)", idcard); } / ** * dígitos e dígitos básicos Verifica os números de ID de 15 dígitos * * @param idcard * @return * / public boolean is15idcard (string idcard) {return idcard == null || "" .Equals (Idcard)? FALSE: Pattern.Matches ("^[1-9] // d {7} (0 // d) | (1 [0-2])) (([0 | 1 | 2] // d) | 3 [0-1]) // d {3} $", idcard); } / ** * Números e dígitos básicos Verifica o número de ID de 18 dígitos * * @param idcard * @return * / public boolean is18idcard (string idcard) {retornar padrão .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); } / ** * Verificação digital * * @param str * @return * / public boolean isDigital (string str) {return str == null || "" .Equals (STR)? Falso: str.Matches ("^[0-9]*$"); } / ** * Multiplique cada bit do cartão de identificação e o fator de ponderação do bit correspondente e, em seguida, obtenha o valor da soma * * @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]; }}} retornar soma; } / ** * Verifique o valor da soma com 11 para obter o restante do código de verificação * * @param checkcode * @param soma17 * @return bit de verificação * / public string getCheckCodeBysum (int sum17) {string checkCode = null; Switch (SUM17 % 11) {Caso 10: CheckCode = "2"; quebrar; caso 9: checkcode = "3"; quebrar; Caso 8: CheckCode = "4"; quebrar; Caso 7: CheckCode = "5"; quebrar; Caso 6: CheckCode = "6"; quebrar; Caso 5: CheckCode = "7"; quebrar; Caso 4: CheckCode = "8"; quebrar; Caso 3: CheckCode = "9"; quebrar; Caso 2: CheckCode = "X"; quebrar; Caso 1: CheckCode = "0"; quebrar; Caso 0: CheckCode = "1"; quebrar; } Retornar CheckCode; } / ** * Converta uma matriz de caracteres em uma matriz inteira * * @param c * @return * @THOWSOWSEFORFORMEXCECCIONA * / public int [] ConverCharToint (char [] c) lança numberFormatexception {int [] a = new int [c.Length]; int k = 0; for (char temp: c) {a [k ++] = integer.parseint (string.valueof (temp)); } retornar um; } public static void main (string [] args) lança a exceção {string idcard15 = "142431199001145"; // string de 15 bits idcard18 = "121212121212121212121212121212"; // 18 bit idcardidator IvdrDer = System.out.println (iv.isValidatedAllidCard (IDCARD15)); System.out.println (iv.isValidatedAllidCard (IDCARD18)); }}Extrair informações relacionadas ao cartão de identificação com base no número do cartão de identificação
importar java.text.simpledEformat; importar java.util.calendar; importar java.util.date; importar java.util.gregorianCalendar; importar java.util.hashmap; import java.util.map; importação java.util.etil./**; IdcardInfoExtractor {// Província Província de String Private; // City Private String City; // Região de cordas privadas do distrito e do condado; // Ano Privado Int Ano; // mês privado int mês; // Data do dia privado int; // gênero de sequência privada de gênero; // Data do nascimento Data Private Data; mapa privado <string, string> cityCodemap = new hashmap <string, string> () {{this.put ("11", "Pequim"); this.put ("12", "Tianjin"); this.put ("13", "hebei"); this.put ("14", "shanxi"); this.put ("15", "Mongólia interna"); this.put ("21", "Liaoning"); this.put ("22", "Jilin"); this.put ("23", "heilongjiang"); this.put ("31", "Xangai"); 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", "Tibet"); this.put ("61", "shaanxi"); this.put ("62", "Gansu"); this.put ("63", "Qinghai"); this.put ("64", "ningxia"); this.put ("65", "xinjiang"); this.put ("71", "Taiwan"); this.put ("81", "Hong Kong"); this.put ("82", "macao"); this.put ("91", "estrangeiro"); }}; Private IDCardValidator Validador = NULL; / *** Inicialize cada atributo de membro por meio de um construtor*/ public IDCardInfoExtractor (String Idcard) {try {validator = new IdcardValidator (); if (validator.isValidatedAllidCard (IDCARD)) {if (idcard.length () == 15) {idcard = validator.convertidcarby15bit (idcard); } // Obtenha a província província de String = IDCARD.SUBSTRING (0, 2); Set <string> key = this.cityCodemap.keyset (); for (string id: key) {if (id.equals (provinceID)) {this.province = this.cityCodemap.get (id); quebrar; }} // Obtenha a sequência de gênero ID17 = IDCARD.SUBSTRING (16, 17); if (Integer.parseint (id17) % 2! = 0) {this.gender = "masculino"; } else {this.gender = "feminino"; } // Obtenha a data de nascimento de aniversário = IDCARD.SUBSTRING (6, 14); Data de nascimento = new SimpleDateFormat ("yyyymmdd") .parse (aniversário); this.birthday = aniversário; GregoriaNCalendar Currentday = New GregoriaCalendar (); Currentday.setTime (data de nascimento); this.year = currentday.get (calendário.year); this.month = currentday.get (calendar.month) + 1; this.day = currentday.get (calendar.day_of_month); }} catch (Exceção e) {e.printStackTrace (); }} / ** * @return the Província * / public string getProvince () {Província de retorno; } / ** * @return the city * / public string getCity () {return city; } / ** * @return the Region * / public string getRegion () {Região de retorno; } / ** * @return the Year * / public int getyear () {ano de retorno; } / ** * @RETURN O mês * / public int getMonth () {Mês de retorno; } / ** * @RETURN O dia * / public int getDay () {dia de retorno; } / ** * @return the gênero * / public string getGender () {return gênero; } / ** * @return the birthday * / public date getBirthday () {return birthday; } @Override public string tostring () {return "Província:" + this.province + ", gênero:" + this.gender + ", data de nascimento:" + this.birthday; } public static void main (string [] args) {string idcard = "12121212121212121212121212"; IdcardInfoExtractor ie = new IdcardInfoExtractor (IDCARD); System.out.println (ie.toString ()); }}O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.