Vérification de la légalité de la carte d'identité Java et obtenir des informations valides du numéro de carte d'identité pour votre référence. Le contenu spécifique est le suivant
Vérification de la légalité de la carte d'identité Java
/**The first 6 digits of the ID card [ABCDEF] are administrative division digital codes (refer to the digital code for short) description (refer to the "GB/T 2260-2007 Administrative Division Code of the People's Republic of China"): * The principle and structure analysis of the compilation of this digital code adopts a three-layer six-digit hierarchical code structure, which represents the provinces (autonomous regions, Les municipalités directement sous le gouvernement central, les régions administratives spéciales), les villes (régions, les préfectures autonomes, les ligues) et les comtés (comtés autonomes, villes au niveau du comté, bannières, bannières autonomes, districts municipaux, zones forestières, districts spéciaux) en Chine selon la hiérarchie. La signification de la structure du code du code numérique de gauche à droite est: la première couche est le code à deux chiffres qui représente la province, la région autonome, la municipalité directement sous le gouvernement central et les régions administratives spéciales; the second layer is CD two-digit code that represents the summary code of the municipality, region, autonomous prefecture, alliance, and municipality directly under the central government, and the summary code of the county-level administrative divisions directly under the provincial (autonomous region), among which: ―01~20, 51~70 represents the city, 01, 02 is also used to represent the summary code of the municipalité directement sous le gouvernement central; ―21 ~ 50 représente le code sommaire du district, préfecture autonome, alliance; ―90 représente le code sommaire des divisions administratives au niveau du comté directement sous la province (région autonome). Le troisième étage est les deux chiffres EF représentant les comtés, les comtés autonomes, les villes au niveau du comté, les bannières, les bannières autonomes, les districts municipaux, les zones forestières et les districts spéciaux. Parmi eux: ―01 ~ 20 représente les villes au niveau du comté avec des villes au niveau du comté sous la juridiction de la ville, des districts (préfectures autonomes, des ligues) et des villes au niveau du comté dans le cadre des divisions administratives au niveau du comté directement sous la juridiction de la province (région autonome). 01 représente généralement le code sommaire de la juridiction; ―21 ~ 80 représente les villes au niveau du comté sous la juridiction des comtés, des comtés autonomes, des bannières, des bannières autonomes, des zones forestières et des districts spéciaux régionaux; ―81 ~ 99 représente les villes au niveau du comté sous la juridiction de la province (région autonome). * / Importer java.text.parseException; import java.text.simpledateformat; import java.util.calendar; import java.util.date; import java.util.gregoriancalendar; import java.util.hashmap; import java.util.map; Description de la classe: Vérification de la légalité de la carte d'identité * </p> * <p> * - 1-chiffre numéro d'identification: 7e et 8e chiffres sont l'année de la naissance (doubles chiffres), les 9e et 10e chiffres sont le mois de naissance, les 11e et 12e chiffres représentent la date de naissance, les 15e chiffres représentent le sexe, les nombres impairs sont les mâles, et même les nombres sont féminins. * --18-chiffre numéro d'identification *: 7, 8, 9 et 10 sont l'année de naissance (quatre chiffres), 11 et 12 sont le mois de naissance, 13 et 14 représentent la date de naissance, 17 représentent le sexe, les nombres impairs sont des hommes, et même les nombres sont des femmes. * </p> * / @ suppresswarnings ({"Unchecked", "inutilisé", "all"}) classe publique idcardValidator {/ ** * Provincial, Municipal Code Table: {11: "Beijing", 12: "Tianjin", 13: "Hebei" 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: "Afforeux"} * / Code de chaîne protégé "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"}, {"" "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," Hube }, {"43", "Hunan"}, {"44", "Guangdong"}, {"45", "Guangxi"}, {"46", "Hainan"}, {"50", "Chongqing"}, {"51", "Sichuan"}, {"52", "Guizhou"}, "5", {{"52", "Guzhou". "Yunnan"}, {"54", "tibet"}, {"61", "shaanxi"}, {"62", "gansu"}, {"63", "Qinghai"}, {"64", "Ningxia",}, "65", " }, {"81", "Hong Kong"}, {"82", "Macao"}, {"91", "Foreign"}}; 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"}; // chaque facteur de pondération Private int Power [] = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2}; // Code de vérification du 18e bit String privé VerifyCode [] = {"1", "0", "x", "9", "8", "7", "6", "5", "4", "3", "2"}; / ** * Vérifiez la légalité de toutes les cartes d'identité * * @param idcard * @return * / public boolean isvalidatedAllidCard (String idcard) {if (idcard.length () == 15) {idcard = this.ConvertidCarby15bit (idcard); } return this.isvalidate18idcard (idcard); } / ** * <p> * Déterminez la légalité d'une carte d'identité à 18 chiffres * </p> * Selon les dispositions sur les numéros d'identification de la citoyenneté dans le National Standard GB11643-1999 de la République populaire de Chine, le numéro d'identification de la citoyenneté est un code de vérification d'un chiffre, composé d'un code d'ontologie numérique à sept chiffres et d'un code de vérification d'un chiffre. * L'ordre d'arrangement est de gauche à droite: code d'adresse à six chiffres, date de code de naissance à huit chiffres, code de séquence à trois chiffres et code de vérification à un chiffre. * <p> * Code de séquence: indique le numéro de séquence attribué aux personnes nées la même année, mois et jour dans la zone identifiée par le même code d'adresse. Le nombre impair du code de séquence est affecté aux hommes et même le nombre est affecté aux femmes. * </p> * <p> * 1. Les 1 et 2 premiers chiffres représentent: le code de la province; 2. Les 3e et 4e chiffres représentent: le code de la ville; 3. Les 5e et 6e chiffres représentent: le code du district et du comté; * 4. Les 7e au 14e chiffres représentent: l'année, mois, jour de naissance; 5. Les 15e et 16e chiffres représentent: le code du poste de police à l'emplacement; * 6. Les 17e chiffres représentent le sexe: les nombres impairs représentent les hommes, et même les nombres représentent les femmes; * 7. Le 18e chiffre est le code de relecture: certains disent qu'il s'agit d'un code d'information personnel, qui est généralement généré au hasard par l'ordinateur pour vérifier l'exactitude de la carte d'identité. Le code d'étalonnage peut être un nombre de 0 à 9, et parfois il est également représenté par x. * </p> * <p> * La méthode de calcul du dix-huitième chiffre (code de contrôle) est: 1. Multipliez le numéro à 17 chiffres du numéro d'identification précédent par différents coefficients. Les coefficients du premier chiffre au dix-septième chiffre sont: 7 9 10 5 8 4 * 2 1 6 3 7 9 10 5 8 4 2 * </p> * <p> * 2. Ajoutez le résultat de la multiplication de ces nombres et coefficients à 17 chiffres. * </p> * <p> * 3. Utilisez l'addition et divisez par 11 pour voir quel est le reste? * </p> * 4. Le reste ne peut avoir que 11 nombres 0 1 2 3 4 5 6 7 8 9 10. Le nombre de la dernière carte d'identité correspondant à chacun est 1 0 x 9 8 7 6 5 4 3 * 2. * <p> * 5. De ce qui précède, si le reste est 2, le ⅹ du chiffre romain apparaîtra sur le 18ème chiffre de la carte d'identité. Si le reste est de 10, le dernier numéro de la carte ID est 2. * </p> * * @param idcard * @return * / public boolean isvalida18idcard (String idcard) {// non-18 bits sont faux if (idcard.length ()! = 18) {return false; } // Obtenez les 17 premiers bits String idCard17 = idcard.Substring (0, 17); // Obtenez la chaîne 18e bit idcard18code = idcard.substring (17, 18); char c [] = null; String checkcode = ""; // sont tous des nombres if (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); // Vérifiez la valeur SUM avec 11 pour obtenir le reste pour la vérification Code CheckCode = getCheckCodeBysum (SUM17); if (null == CheckCode) {return false; } // Faites correspondre le 18e bit de la carte d'identité avec le code d'étalonnage calculé. S'il n'est pas égal, c'est un faux if (! Idcard18code.equalsignorecase (checkcode)) {return false; }} return true; } / ** * Vérifiez la légalité de la carte d'identité 15 bits. Cette méthode est inexacte. Il est préférable de convertir 15 en 18 bits avant de juger, qui a été fourni dans cette classe. * * @param idcard * @return * / public boolean isvalida15idcard (string idcard) {// non-15 bits sont false if (idcard.length ()! = 15) {return false; } // sont tous des nombres if (isdigital (idcard)) {String provinceId = idcard.substring (0, 2); String anniversaire = idcard.substring (6, 12); int an = Integer.ParseInt (idcard.Substring (6, 8)); int mois = Integer.ParseInt (idcard.Substring (8, 10)); int day = Integer.ParseInt (idcard.Substring (10, 12)); // déterminer s'il s'agit d'un drapeau booléen de la province légale = false; for (String id: citycode) {if (id.equals (provinceId)) {flag = true; casser; }} if (! Flag) {return false; } // La date de naissance de cette carte d'identité est fausse après la date de naissance de la date actuelle = null; essayez {Birthdate = new SimpledateFormat ("yymmdd"). Parse (anniversaire); } catch (parseException e) {e.printStackTrace (); } if (naissance == null || new Date (). Avant (Date de naissance)) {return false; } // Pour déterminer s'il s'agit d'une année légale GregorianCalendar Curday = New GregorianCalendar (); int curyear = curday.get (calendar.year); int anne2bit = Integer.ParseInt (String.ValueOf (Curyear) .Substring (2)); //} // Pour déterminer s'il s'agit d'un mois légal si (mois <1 || mois> 12) {return false; } // pour déterminer s'il s'agit d'une date légale booléenne mflag = false; curday.settime (date de naissance); // Attribuez la date de naissance de cette carte d'identité à l'objet Curday Switch (mois) {Cas 1: Cas 3: Cas 5: Cas 7: Cas 8: Cas 10: Cas 12: MFLAG = (Day> = 1 && Day <= 31); casser; Cas 2: // Il y a 28 jours en février du calendrier grégorien et 29 jours en février de l'année Leap. if (curday.isleapyear (curday.get (calendar.year))) {mflag = (day> = 1 && day <= 29); } else {mflag = (day> = 1 && day <= 28); } casser; Cas 4: cas 6: cas 9: cas 11: mflag = (day> = 1 && day <= 30); casser; } if (! mflag) {return false; }} else {return false; } return true; } / ** * Convertir une carte d'identification à 15 chiffres en une carte d'identification à 18 chiffres * * @param idcard * @return * / public String convertidCarby15bit (String idcard) {String idCard17 = null; // carte d'identification non-15 bits if (idcard.length ()! = 15) {return null; } if (isdigital (idcard)) {// Obtenez la date de la chaîne de naissance anniversaire = idcard.substring (6, 12); Date de naissance = null; essayez {Birthdate = new SimpledateFormat ("yymmdd"). Parse (anniversaire); } catch (parseException e) {e.printStackTrace (); } Calendar cday = calendar.getInstance (); cday.settime (date de naissance); String anny = string.valueof (cday.get (calendar.year)); idcard17 = idcard.substring (0, 6) + an + idcard.substring (8); char c [] = idcard17.tocharay (); String checkcode = ""; if (null! = c) {int bit [] = new int [idcard17.length ()]; // convertit le tableau de caractères en un tableau entier bit = converchartoint (c); int sum17 = 0; sum17 = getpowersum (bit); // Obtenez la valeur de somme et obtenez le reste pour vérifier le code CheckCode = getCheckCodeBysum (SUM17); // Impossible d'obtenir le bit de contrôle si (null == CheckCode) {return null; } // épisser les 17 premiers chiffres avec le code de vérification du 18ème chiffre idcard17 + = CheckCode; }} else {// La carte ID contient le numéro de retour null; } return idcard17; } / ** * Vérification numérique et numérique de base des numéros de carte d'identité 15 bits et 18 bits * * @param idcard * @return * / public boolean isidcard (String idcard) {return idcard == null || "" .Equals (idcard)? FAUX: Pattern.matches ("(^ // d {15} $) | (// d {17} (?: // d | x | x) $)", idcard); } / ** * Les chiffres de base et les chiffres vérifient les numéros d'ID à 15 chiffres * * @param idcard * @return * / public boolean is15idcard (String idcard) {return idcard == null || "" .Equals (idcard)? FAUX: Pattern.matches ("^ [1-9] // d {7} (0 // d) | (1 [0-2])) (([0 | 1 | 2] // d) | 3 [0-1]) // d {3} $", idcard); } / ** * Les numéros de base et les chiffres vérifient le numéro d'identification à 18 chiffres * * @param idcard * @return * / public boolean is18idcard (String idcard) {return motive .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); } / ** * Vérification numérique * * @param str * @return * / public boolean isdigital (String str) {return str == null || "" .Equals (str)? false: str.matches ("^ [0-9] * $"); } / ** * Multipliez chaque bit de la carte ID et le facteur de pondération du bit correspondant, puis obtenez la valeur de somme * * @param bit * @return * / public int getPowersum (int [] bit) {int sum = 0; if (power.length! = bit.length) {return sum; } pour (int i = 0; i <bit.length; i ++) {for (int j = 0; j <power.length; j ++) {if (i == j) {sum = sum + bit [i] * power [j]; }}} Retour Sum; } / ** * Vérifiez la valeur SUM avec 11 pour obtenir le reste du code de vérification * * @param CheckCode * @param sum17 * @return Check Bit * / public String getCheckCodeBysum (int sum17) {String CheckCode = null; commutateur (sum17% 11) {cas 10: checkcode = "2"; casser; Cas 9: Checkcode = "3"; casser; cas 8: checkcode = "4"; casser; Cas 7: Checkcode = "5"; casser; cas 6: checkcode = "6"; casser; Cas 5: Checkcode = "7"; casser; cas 4: checkcode = "8"; casser; cas 3: checkcode = "9"; casser; cas 2: checkcode = "x"; casser; cas 1: checkcode = "0"; casser; Case 0: Checkcode = "1"; casser; } return checkcode; } / ** * Convertir un tableau de caractères en un tableau entier * * @param c * @return * @throws norberformatexception * / public int [] converchartOoint (char [] c) lève la forme de forme int k = 0; pour (char temp: c) {a [k ++] = Integer.ParseInt (String.ValueOf (temp)); } return a; } public static void main (String [] args) lève une exception {chaîne idcard15 = "142431199001145"; // string 15-bit idcard18 = "12121212121212121212121212"; // 18-bits idcardvalidator iv = newcardvalidator ();); System.out.println (iv.isvalidatedAllidCard (idCard15)); System.out.println (iv.isvalidatedAllidCard (idCard18)); }}Extraire les informations liées à la carte d'identité en fonction du numéro de carte d'identité
Importer java.text.simpledateFormat; import java.util.calendar; import java.util.date; import java.util.gregoricancalendar; import java.util.hashmap; import ... IdCardinfoExtractor {// Province Private String Province; // City Private String City; // Région des cordes privées du district et du comté; // l'année privée de l'année; // mois privé Mois d'int; // Date de la journée privée; // Gender la chaîne privée de genre; // Date de naissance anniversaire de date privée; map privé <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", "Mongolie intérieure"); 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", "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", "étranger"); }}; Validator privé idcardValidator = null; / ** * Initialisez chaque attribut de membre via un constructeur * / public idCardiNfoExtractor (String idcard) {try {validator = new idcardValidator (); if (validator.isvalidatedAllidCard (idcard)) {if (idcard.length () == 15) {idcard = validator.convertidCarby15bit (idcard); } // Obtenez la province String provinceId = idcard.substring (0, 2); Set <string> key = this.citycodemap.KeySet (); for (String id: key) {if (id.equals (provinceId)) {this.province = this.cityCodemap.get (id); casser; }} // Obtenez la chaîne de genre id17 = idcard.substring (16, 17); if (Integer.ParseInt (id17)% 2! = 0) {this.gender = "mâle"; } else {this.gender = "femme"; } // Obtenez la date de la chaîne de naissance anniversaire = idcard.substring (6, 14); Date de naissance = new SimpledateFormat ("yyyymmdd") .parse (anniversaire); this.birthday = anniversaire; GregorianCalendar Currentday = new GregorianCalendar (); CurrentDay.SetTime (Date de naissance); this.year = currentday.get (calendar.year); this.month = currentday.get (calendar.month) + 1; this.day = currentday.get (calendar.day_of_month); }} catch (exception e) {e.printStackTrace (); }} / ** * @return la province * / public string getProvince () {return province; } / ** * @return la ville * / public String getCity () {return City; } / ** * @return la région * / public String getRegion () {return région; } / ** * @return l'année * / public int getyear () {Retour Year; } / ** * @return le mois * / public int getMonth () {return mois; } / ** * @return le jour * / public int getday () {return day; } / ** * @return le genre * / public String getgender () {return Gender; } / ** * @return l'anniversaire * / public date getBirthday () {return anniversaire; } @Override public String toString () {return "province:" + this.province + ", genre:" + this.gender + ", date de naissance:" + this.birthday; } public static void main (String [] args) {String idcard = "1212121212121212121212"; IdCardiNfoExtractor ie = new idCardiNfoExtractor (idcard); System.out.println (ie.toString ()); }}Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.