Java -ID -Karten -Legalitätsüberprüfung und erhalten Sie gültige Informationen zur ID -Kartennummer für Ihre Referenz. Der spezifische Inhalt ist wie folgt
Java -ID -Karten -Legalitätsprüfung
/** Die ersten 6 Ziffern der ID-Karte [ABCDEF] sind die digitalen Codes der administrativen Abteilung (siehe Kurzer Gemeinden direkt unter der Zentralregierung, Sonderverwaltungsregionen), * Städten (Regionen, autonomen Präfekturen, Ligen) und Landkreisen (autonome Grafschaften, Städte auf Kreisebene, Banner, autonome Banner, Gemeindeviertel, Waldgebiete, Spezialbezirke) in China nach Angaben der Heiler. Die Bedeutung der Struktur des digitalen Code-Code von links nach rechts ist: Die erste Ebene ist AB-zweistelliger Code, der die Provinz, die autonome Region, die Gemeinde direkt unter der Zentralregierung und spezielle Verwaltungsregionen darstellt. Die zweite Schicht ist der zweistellige CD-Code, der den Zusammenfassungscode der Gemeinde, der Region, der autonomen Präfektur, der Bündnisse und der Gemeinde direkt unter der Zentralregierung und des Zusammenfassungscode der Verwaltungsstufe auf Bezirksebene direkt unter der Provinz (autonome Region) direkt unter der Provinz (Autonomous Region), unter der auch die Summary ~ 70 darstellt, direkt unter der Stadt, 02, 02, 02, 02, 02, 02, 02, 02, 02, 02, 02. Darstellung, die städtische Darstellung der Stadt,, dargestellt wird, die Muncory-Depräsentation darstellt, darstellt, darstellt. die Zentralregierung; —21 ~ 50 repräsentiert den Zusammenfassungscode des Distrikts, autonome Präfektur, Allianz; —90 repräsentiert den Zusammenfassungskodex der Verwaltungsabteilungen auf Bezirksebene direkt unter der Provinz (autonome Region). Der dritte Stock sind die beiden EF-Ziffern, die Landkreise, autonome Landkreise, Städte auf Kreisebene, Banner, autonome Banner, Gemeindeviertel, Waldgebiete und Sonderbezirke darstellen. Unter ihnen: —01 ~ 20 repräsentiert Städte auf Bezirksebene mit Städten auf Bezirksebene, die unter der Zuständigkeit der Stadt, Bezirken (autonome Präfekturen, Ligen) und Städten auf Kreisebene im Rahmen der Verwaltungsabteilungen auf Bezirksebene (autonomische Region) (autonomische Region) (autonomische Region) (autonomische Region) auftreten. 01 repräsentiert normalerweise den Zusammenfassungscode der Gerichtsbarkeit; —21 ~ 80 repräsentiert Städte auf Bezirksebene im Rahmen der Gerichtsbarkeit von Landkreisen, autonomen Landkreisen, Bannern, autonomen Bannern, Waldgebieten und regionalen Sonderbezirken; —81 ~ 99 repräsentiert Städte auf Bezirksebene unter der Gerichtsbarkeit der Provinz (autonome Region). */import java.text.parseException; import Java.Text.SimpledateFormat; Import Java.util.Calendar; Import Java.util.date; import Java.util.gregoriancalendar; importieren java.util.hashmap; * Klasse Beschreibung: ID-Karten-Legalitätsüberprüfung * </p> * <p> *--15-stellige ID-Nummer: 7. und 8. Ziffern sind das Geburtsjahr (zweistellige Ziffern), 9. und 10. Ziffern sind der Monat der Geburt, 11. und 12. Ziffern repräsentieren das Geburtsdatum. *-18-stellige ID-Nummer*: 7, 8, 9 und 10 sind das Geburtsjahr (vier Ziffern), 11 und 12 sind der Geburtsmonat, 13 und 14 repräsentieren das Geburtsdatum, 17 repräsentieren das Geschlecht, ungerade Zahlen sind männlich und sogar Zahlen sind weiblich. * </p> */@unterdrücktewarnings ({"Unbekämpft", "unbenutzt", "alle"}) IDCARDVALIDATOR PUBLIC CLASSE {/** * Provinziale, städtische Code -Tabelle: {11: "Peking", 12: "Tianjin", 13: "Hebei, 14:" Shanxi, 15: ", 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: "Fremd"} */ Protected String CodeAndCity [] [] = {{{{11 "," Beijing "," "13", "Hebei"}, {"14", "Shanxi"}, {"15", "Inner Mongolia"}, {"21", "Liaoning"}, {"22", "Jilin"}, {"23", "Heilongjiangjiangjiang", {{",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ", 31", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", "31 "Jiangsu"}, {"33", "zhejiang"}, {"34", "anhui"}, {"35", "fujian"}, {"36", "Jiangxi"}, {"37 }, {"43". "Yunnan" }, { "54", "Tibet" }, { "61", "Shaanxi" }, { "62", "Gansu" }, { "63", "Qinghai" }, { "64", "Ningxia" }, { "65", "Xinjiang" }, { "71", "Taiwan" }, {"81", "Hongkong"}, {"82", "macao"}, {"91", "Fremd"}}; 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"}; // jeder Gewichtungsfaktor Private int Power [] = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2}; // 18. Bit -Verifizierungscode private String verifizierencode [] = {"1", "0", "x", "9", "8", "7", "6", "5", "4", "3", "2"}; / ** * Überprüfen Sie die Rechtmäßigkeit aller ID -Karten * * @param idcard * @return */ public boolean isvalidatedallidCard (String idCard) {if (idcard.length () == 15) {idcard = this.convertidCarby15bit (idcard); } return this.isvalidate18IdCard (idCard); } /** * <p> * Bestimmen Sie die Rechtmäßigkeit einer 18-stelligen ID-Karte * < /p> * gemäß den Bestimmungen zu Staatsbürgerschafts-ID-Nummern im Nationalen Standard GB11643-1999 der Volksrepublik China sind die ID-Nummer des Bürgerschaftsnummers ein Merkmals-Kombinationscode. * Die Anordnung ist von links nach rechts: Sechsstelliger Adresscode, achtstelliges Datum des Geburtscode, dreistelliger Sequenzcode und einstelliger Überprüfungscode. * <P> * Sequenzcode: Zeigt die Sequenznummer an, die Personen, die im selben Jahr, Monat und Tag in dem von demselben Adresscode identifizierten Bereich geboren wurden, zugewiesen wurden. Die ungerade Anzahl des Sequenzcodes wird Männern zugeordnet und sogar die Zahl der Frauen zugeordnet. * </p> * <p> * 1. Die ersten 1 und 2 Ziffern repräsentieren: den Code der Provinz; 2. Die 3. und 4. Ziffern repräsentieren: den Code der Stadt; 3. Die 5. und 6. Ziffern repräsentieren: der Kodex des Distrikts und des Landkreises; * 4. Die 7. bis 14. Ziffern repräsentieren: das Jahr, den Monat, den Tag der Geburt; 5. Die 15. und 16. Ziffern repräsentieren: der Kodex der Polizeistation am Standort; * 6. Die 17. Ziffern repräsentieren das Geschlecht: ungerade Zahlen repräsentieren Männer, und sogar Zahlen repräsentieren Frauen; * 7. Die 18. Ziffer ist der Korrekturlesencode: Einige sagen, dass es sich um einen persönlichen Informationscode handelt, der im Allgemeinen vom Computer zufällig generiert wird, um die Richtigkeit der ID -Karte zu überprüfen. Der Kalibrierungscode kann eine Zahl von 0 bis 9 sein und manchmal auch durch x dargestellt. * </p> * <p> * Die Berechnungsmethode der achtzehnten Ziffer (Check-Code) lautet: 1. Multiplizieren Sie die 17-stellige Anzahl der vorherigen ID-Nummer mit verschiedenen Koeffizienten. Die Koeffizienten von der ersten Ziffer bis zur siebzehnten Ziffer sind: 7 9 10 5 8 4 * 2 1 6 3 7 9 10 8 4 2 * <p> * <p> * 2. Fügen Sie das Ergebnis hinzu, wenn Sie diese 17-stelligen Zahlen und Koeffizienten multiplizieren. * </p> * <p> * 3. Verwenden Sie die Addition und teilen Sie sich durch 11, um zu sehen, was der Rest ist? * </p> * 4. Der Rest kann nur 11 Zahlen 0 1 2 3 4 5 6 7 8 9 10 haben. Die Anzahl der zuletzt entsprechenden ID -Karte beträgt 1 0 x 9 8 7 5 4 3 * 2. Wenn der Rest 10 ist, beträgt die letzte Nummer der ID-Karte 2. * </ p> * * @param idcard * @return */ public boolean isvalidate18IDCard (String idCard) {// nicht 18 Bits sind falsch if (idcard.length ()! = 18) {return false; } // Erhalten Sie die ersten 17 Bits String idCard17 = idCard.substring (0, 17); // Erhalten Sie den 18. Bit String idCard18Code = idCard.substring (17, 18); char c [] = null; String checkcode = ""; // sind alle Zahlen, wenn (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); // Überprüfen Sie den Summenwert mit 11, um den Rest für den Verifizierungscode CheckCode = getCheckCodeBysum (SUM17) zu erhalten. if (null == checkCode) {return false; } // Stimmen Sie das 18. Bit der ID -Karte mit dem berechneten Kalibrierungscode an. Wenn es nicht gleich ist, ist es ein falsches if (! Idcard18Code.equalSignoreCase (checkcode)) {return false; }} return true; } /*** Überprüfen Sie die Legalität der 15-Bit-ID-Karte. Diese Methode ist ungenau. Es ist am besten, 15 bis 18-Bit vor der Beurteilung zu konvertieren, was in dieser Klasse bereitgestellt wurde. * * @param idCard * @return */ public boolean isvalidate15IdCard (String idCard) {// nicht 15 Bits sind falsch if (idcard.length ()! = 15) {return false; } // sind alle Zahlen, wenn (isDigital (idCard)) {String provincId = idcard.substring (0, 2); String birthday = idCard.substring (6, 12); int Jahr = Integer.ParseInt (idcard.substring (6, 8)); int monon = ginnEger.parseInt (idcard.substring (8, 10)); int Day = Integer.ParseInt (idcard.substring (10, 12)); // Bestimmen Sie, ob es sich um eine juristische Provinz boolesche Flagge = Falsch; für (String -ID: CityCode) {if (id.equals (provinceId)) {flag = true; brechen; }} if (! flag) {return false; } // Das Geburtsdatum dieser ID -Karte ist falsch nach dem aktuellen Datum Birthdate = null; try {birthDate = new SimpledateFormat ("yymmdd"). Parse (Geburtstag); } catch (parseException e) {e.printstacktrace (); } if (birthDate == null || neuer Datum (). Bevor (birthDate)) {return false; } //, um festzustellen, ob es sich um ein legales Jahr gregoriancalendar curday = neuer Gregoriancalendar (); int curyear = curday.get (Kalender.YEAR); int yeal2bit = Integer.ParseInt (String.Valueof (curyear) .substring (2)); //} //, um festzustellen, ob es sich um einen legalen Monat handelt, wenn (Monat <1 || Monat> 12) {return false; } //, um festzustellen, ob es sich um ein legales Datum boolean mflag = false; Curday.Settime (BirthDate); // dem Geburtsdatum dieser ID -Karte dem Objekt -Curday -Switch (Monat) {Fall 1: Fall 3: Fall 5: Fall 7: Fall 8: Fall 10: Fall 12: mflag = (Tag> = 1 && Tag <= 31) zuweisen; brechen; Fall 2: // Es gibt 28 Tage im Februar des Gregorianischen Kalenders und 29 Tage im Februar des Schaltjahres. if (curday.islaPyear (Curday.get (calendar.year))) {mflag = (Tag> = 1 && Tag <= 29); } else {mflag = (Tag> = 1 && Tag <= 28); } brechen; Fall 4: Fall 6: Fall 9: Fall 11: mflag = (Tag> = 1 && Tag <= 30); brechen; } if (! mflag) {return false; }} else {return false; } Return true; } / ** * eine 15-stellige ID-Karte in eine 18-stellige ID-Karte konvertieren * * @param idCard * @return * / public String convertIDCARBY15bit (String idCard) {String idCard17 = null; // Nicht-15-Bit-ID-Karte if (idcard.length ()! = 15) {return null; } if (isDigital (idCard)) {// Erhalten Sie das Geburtsstring -String -Geburtstag = idcard.substring (6, 12); Datum Birthdate = null; try {birthDate = new SimpledateFormat ("yymmdd"). Parse (Geburtstag); } catch (parseException e) {e.printstacktrace (); } Kalendar cday = calendar.getInstance (); Cday.Settime (BirthDate); String Year = String.ValueOf (cday.get (calendar.year)); idCard17 = idCard.substring (0, 6) + Jahr + idcard.substring (8); char c [] = idCard17.toCharArray (); String checkcode = ""; if (null! = c) {int bit [] = new int [idCard17.length ()]; // das Zeichenarray in ein Ganzzahl -Array -Bit = Converchartoint (c) konvertieren; int sum17 = 0; sum17 = GetPowersum (Bit); // den Summenwert abrufen und den Rest den Code CheckCode = getCheckCodeBysum (SUM17) überprüfen; // Das Scheckbit kann nicht abrufen, wenn (null == checkCode) {return null; } // Die ersten 17 Ziffern mit dem 18. Ziffern -Check -Code -IDCARD17 += checkCode; }} else {// Die ID -Karte enthält die Nummer return null; } return idCard17; } / ** * grundlegende numerische und stellige Überprüfung von 15-Bit- und 18-Bit-ID-Kartennummern * * @param idCard * @return * / public boolean isidCard (String idCard) {return idcard == null || "" .Equals (idCard)? false: muster.matches ("(^// d {15} $) | (// d {17} (?: // d | x | x) $)", idCard); } / ** * Grundlegende Ziffern und Ziffern-Überprüfungen für 15-stellige ID-Nummern * * @param idcard * @return * / public boolean is15IdCard (String idCard) {return idcard == null || "" .Equals (idCard)? false: muster.matches ("^[1-9] // d {7} (0 // d) | (1 [0-2]) (([0 | 1 | 2] // d) | 3 [0-1]) // d {3} $", idCard); } / ** * Grundnummern und Ziffernprüfungen für die 18-stellige ID-Nummer * * @param idcard * @return * / public boolean is18Idcard (String idCard) {return muster .matches (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 | x] {1}) $", idcard); } / ** * Digitale Überprüfung * * @param str * @return * / public boolean isDigital (String str) {return str == null || "" .equals (str)? Falsch: Str.Matches ("^[0-9]*$"); } / ** * Multiplizieren Sie jedes Bit der ID -Karte und den Gewichtungsfaktor des entsprechenden Bits und erhalten Sie dann den Summenwert * * @param bit * @return * / public int GetPowersum (int [] bit) {int sum = 0; if (power.length! = bit.length) {return sum; } für (int i = 0; i <bit.length; i ++) {für (int j = 0; j <power.length; j ++) {if (i == j) {sum = sum+bit [i] * power [j]; }}} return sum; } / ** * Überprüfen Sie den Summenwert mit 11, um den Rest für den Verifizierungscode zu erhalten Switch (sum17 % 11) {Fall 10: checkCode = "2"; brechen; Fall 9: checkcode = "3"; brechen; Fall 8: checkcode = "4"; brechen; Fall 7: checkcode = "5"; brechen; Fall 6: checkcode = "6"; brechen; Fall 5: checkcode = "7"; brechen; Fall 4: checkcode = "8"; brechen; Fall 3: checkcode = "9"; brechen; Fall 2: checkcode = "x"; brechen; Fall 1: checkcode = "0"; brechen; Fall 0: checkcode = "1"; brechen; } return checkcode; } / ** * Ein Zeichenarray in ein Ganzzahl -Array umwandeln int k = 0; für (char temp: c) {a [k ++] = integer.parseInt (string.Valueof (temp)); } return a; } public static void main (String [] args) löst die Ausnahme aus {String idCard15 = "14243119001145"; // 15-Bit String idcard18 = "1212121212121212121212121212"; // 18-Bit Idcardvalidator iv = New Idcardvalidator (); System.out.println (iv.isvalidatedallidcard (IDCARD15)); System.out.println (iv.isvalidatedallidcard (idcard18)); }}Extrahieren Sie Informationen zur ID -Karte basierend auf der ID -Kartennummer
Import Java.Text.SimpledateFormat; Import Java.util.calendar; Import Java.util.date; Import Java.util.gregoriancalendar; Java.util.hashMap importieren java.util.map; IdCardInfoextractor {// Provinz Private String Provinz; // City Private String City; // Distrikt und Landkreis Private Saitenregion; // Jahr Private int Jahr; // Monat privat int Monat; // Privat int Day; // Gender Private String Geschlecht; // Geburtsdatum Privatdatum Geburtstag; private map <String, String> CityCodemap = new HashMap <String, String> () {{this.put ("11", "peking"); this.put ("12", "Tianjin"); this.put ("13", "hebei"); this.put ("14", "Shanxi"); this.put ("15", "innere Mongolei"); 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", "Hongkong"); this.put ("82", "macao"); this.put ("91", "fremd"); }}; private idcardvalidator validator = null; / *** Initialisieren Sie jedes Element -Attribut über einen Konstruktor*/ public idCardInfoextractor (String idCard) {try {validator = new idCardValidator (); if (validator.isvalidatedAllidCard (idCard)) {if (idcard.length () == 15) {idcard = validator.convertIdcarby15bit (idCard); } // Holen Sie sich die Provinz String provinceId = idcard.substring (0, 2); Set <string> key = this.cityCodemap.keyset (); für (String -ID: Key) {if (id.equals (provinceId)) {this.province = this.cityCodemap.get (id); brechen; }} // Erhalten Sie die Geschlechtszeichenfolge id17 = idcard.substring (16, 17); if (Integer.ParseInt (ID17) % 2! = 0) {this.GENDE = "MALE"; } else {this.gender = "weiblich"; } // Erhalten Sie das Datum der Geburtsfolge String birthday = idcard.substring (6, 14); Datum birthDate = new SimpledateFormat ("yyyymmdd") .Parse (Geburtstag); this.birthday = Geburtstag; Gregoriancalendar Currentday = New Gregoriancalendar (); Currentday.Settime (BirthDate); this.year = currentday.get (Calendar.year); this.month = currentday.get (Kalender.month) + 1; this.day = currentday.get (calendar.day_of_month); }} catch (Ausnahme e) {e.printstacktrace (); }} / ** * @return die Provinz * / public String getProvince () {return provinz; } / ** * @return die Stadt * / public String getCity () {return city; } / ** * @return die Region * / public String getRegion () {return Region; } / ** * @return das Jahr * / public int getyear () {Rückgabejahr; } / ** * @return den Monat * / public int getMonth () {return Monat; } / ** * @return den Tag * / public int getayday () {Return Day; } / ** * @return das Geschlecht * / public String getGender () {return Gender; } / ** * @return the birthday * / public date getBirthday () {return birthday; } @Override public String toString () {return "provinz:" + this.province + ", Geschlecht:" + this.Gerper + ", Geburtsdatum:" + this.birthday; } public static void main (String [] args) {String idcard = "1212121212121212121212"; IdCardInfoextractor IE = new idCardInfoextractor (idCard); System.out.println (IE.ToString ()); }}Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.