Идентификационная карта Java ID Проверка законности и получите допустимую информацию о номере идентификационной карты для вашей ссылки. Конкретный контент заключается в следующем
Java ID -карта проверка законности
/**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, municipalities непосредственно под центральным правительством, специальными административными регионами), * городами (регионы, автономные префектуры, лиги) и округа (автономные округа, города округа, баннеры, автономные баннеры, муниципальные районы, лесные районы, специальные районы) в Китае в соответствии с иерархией. Значение структуры цифрового кода слева направо: первым слоем является двухзначный код AB, который представляет провинцию, автономный регион, муниципалитет непосредственно под центральным правительством и специальные административные регионы; Второй слой-это двухзначный код CD, который представляет собой суммарный кодекс муниципалитета, региона, автономной префектуры, альянса и муниципалитета непосредственно под центральным правительством, и суммарный кодекс административных подразделений уровня округа непосредственно под провинцией (автономный регион), среди которого: «01 ~ 20 ~ 70». муниципалитет непосредственно под центральным правительством; ―21 ~ 50 представляет сводный кодекс округа, автономная префектура, альянс; ―90 представляет собой краткий кодекс административных подразделений на уровне округа непосредственно в провинции (автономный регион). Третий этаж-две цифры EF, представляющие округа, автономные округа, города уровня округа, баннеры, автономные баннеры, муниципальные районы, лесные районы и специальные районы. Среди них: «01 ~ 20 представляет города на уровне округа с городами округа под юрисдикцией города, округа (автономные префектуры, лиги) и городами округа под административными подразделениями на уровне округа непосредственно под юрисдикцией пособия (автономный регион). 01 обычно представляет сводный кодекс юрисдикции; ―21 ~ 80 представляет города на уровне округа под юрисдикцией округов, автономных округов, баннеров, автономных баннеров, лесных районов и региональных специальных округов; ―81 ~ 99 представляет города на уровне округа под юрисдикцией провинции (автономный регион). */import java.text.parseexception; import java.text.simpledateformat; import java.util.calendar; import java.util.date; импорт java.util.gregoriancalendar; import java.util.hashmap; import java.Util.Map; import java.T.Rege. Описание: Идентификационная карта Проверка законности * </p> * <p> *-15-й идентификационный номер цифры: 7-й и 8-й цифры-это год рождения (двузначные цифры), 9-й и 10-й цифры-это месяц рождения, 11-й и 12-й цифры представляют собой дату рождения, 15-й цифры представляют собой гендер, нечетные числа являются мужчинами, а даже числа-это женщины. *--18-значный идентификационный номер*: 7, 8, 9 и 10-год рождения (четыре цифры), 11 и 12-месяц рождения, 13 и 14 представляют дату рождения, 17 представляют пол, нечетные числа-мужчины, а даже числа-женщины. * </p> */@PuppressWarnings ({"unchecked", "неиспользуется", "All"}) открытый класс idcardvalidator {/** * провинциальный, муниципальный кодовый таблица: {11: "Beijing", 12: "Tianjin", 13: "Hebei", 14: "Shanxi" 21: «Liaoning», 22: «Jilin», 23: «Heilongjiang», 31: «Shanghai», 32: «Цзянсу», * 33: «Чжэцзян», 34: «Анхуи», 35: «Фуцзянь», 36: «jiangxi», 37: ». 42: «Хубей», 43: «Хунань», 44: «Гуандун», 45: «Гуанси», 46: «Хайнань», 50: «Чунцин», * 51: «Сичуань», 52: «Гичжоу», 53: «Юньнан», 54: «Тибет», 61: «Шаан»: «62:». 63: «Qinghai», 64: «Ningxia», 65: «Xinjiang», 71: «Тайвань», 81: «Гонконг», 82: «Макао», 91: «Иностранное»} */ Защищенный струнный кодовой "13", "hebei"}, {"14", "shanxi"}, {"15", "Inner Mongolia"}, {"21", "liaoning"}, {"22", "Jilin"}, {"23", "Heilongjiang", {"31", ",", ",", ",", "," 32 "," 31 ",", "32 "Jiangsu"}, {"33", "Zhejiang"}, {"34", "anhui"}, {"35", "fujian"}, {"36", "jiangxi"}, {"37", "Shandong"}, {"41", "Henan", "," 42 "," 42 "," 42 "," 42 "," 42 "," 42 "," 42 ",". " }, {"43", "hunan"}, {"44", "guangdong"}, {"45", "guangxi"}, {"46", "hainan"}, {"50", "chongqing"}, {"51", "Sichuan",}, "," 52 ",", "52", "52", "52", "52", "52", "52 "Yunnan"}, {"54", "tibet"}, {"61", "shaanxi"}, {"62", "gansu"}, {"63", "Qinghai"}, {"64", "ningxia"}, {"65", "xinjiang", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", "71 }, {"81", "Hongkong"}, {"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 "," 41 "," 41 "," 41 "," 46 "," 46 ". "52", "53", "54", "61", "62", "63", "64", "65", "71", "81", "82", "91"}; // Каждый весовой коэффициент частной мощности [] = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2}; // 18 -й код проверки битов Private String VerifyCode [] = {"1", "0", "x", "9", "8", "7", "6", "5", "4", "3", "2"}; / ** * Проверьте законность всех идентификационных карт * * @param idcard * @return */ public boolean isvalidatedallidcard (string idcard) {if (idcard.length () == 15) {idcard = this.convertidcarby15bit (idcard); } вернуть это.isvalidate18idcard (idcard); } /** * <p> * Определите законность 18-значной идентификационной карты * < /p> * Согласно положениям идентификационных номеров гражданства в национальном стандарте GB11643-1999 Народной республики Китая, идентификационный номер гражданства является кодексом комбинированной комбинации, состоящий из кодекса цифрового онтология семнадцати дигиторов и кодекса с одним дигитом. * Заказ о договоренности находится слева направо: шестизначный код адреса, восьмизначная дата кода рождения, трехзначный код последовательности и однозначный код проверки. * <p> * Код последовательности: указывает номер последовательности, назначенный людям, родившимся в том же, месяце и день в районе, идентифицированной тем же адресом. Нечетное число кода последовательности назначается мужчинам, а даже число назначается женщинам. * </p> * <p> * 1. Первые 1 и 2 цифры представляют: код провинции; 2. 3 -й и 4 -й цифры представляют: Кодекс города; 3. 5 -й и 6 -й цифры представляют: Кодекс округа и округа; * 4. 7-14 цифр представляют: год, месяц, день рождения; 5. 15 -й и 16 -й цифры представляют: Кодекс полицейского участка в этом месте; * 6. 17 -й цифры представляют пол: нечетные числа представляют мужчин, а даже числа представляют самок; * 7. 18 -й цифр - это код корректуры: некоторые говорят, что это код личной информации, который обычно генерируется компьютером случайным образом, чтобы проверить правильность идентификационной карты. Калибровочный код может быть числом от 0 до 9, а иногда он также представлен X. * </p> * <p> * Метод расчета восемнадцатой цифры (проверка кода): 1. Умножьте 17-значный номер предыдущего идентификационного номера на разные коэффициенты. Коэффициенты от первой цифры до семнадцатой цифры: 7 9 10 5 8 4 4 * 2 1 6 3 7 9 10 5 8 4 2 * </p> * <p> * 2. Добавьте результат умножения этих 17-значных чисел и коэффициентов. * </p> * <p> * 3. Используйте добавление и разделите на 11, чтобы увидеть, что такое остаток? * </p> * 4. Остальная часть может иметь только 11 чисел 0 1 2 3 4 5 6 7 8 9 10. Число последней идентификационной карты, соответствующей каждому, составляет 1 0 x 9 8 7 6 5 4 3 * 2. * <p> * 5. Из вышеизложенного, если остаток составляет 2, ⅹ римского числа появится на 18 -й цифре идентификационной карты. Если оставшаяся часть составляет 10, последний номер идентификационной карты составляет 2. * </ p> * * @param idcard * @return */ public boolean isvalidate18idcard (String idcard) {// не-18 бит является false if (idcard.length ()! = 18) {return false; } // Получить первые 17 бит строки idcard17 = idcard.substring (0, 17); // Получить 18 -й бит строки idcard18code = idcard.substring (17, 18); char c [] = null; String checkCode = ""; // все числа, если (iSdigital (idcard17)) {c = idcard17.thararray (); } else {return false; } if (null! = c) {int bit [] = new int [idcard17.length ()]; bit = converchartoint (c); int sum17 = 0; sum17 = getPowerSum (bit); // Проверьте значение суммы с 11, чтобы получить остаток для проверки кода. if (null == fectcode) {return false; } // Сопоставьте 18 -й бит идентификационной карты с расчетным калибровочным кодом. Если это не равно, это false if (! Idcard18code.equalsignorecase (feetCode)) {return false; }} вернуть true; } /*** Проверьте законность 15-битной идентификационной карты. Этот метод неточен. Лучше всего преобразовать 15-18 бит до суждения, что было предоставлено в этом классе. * * @param idcard * @return */ public boolean isvalidate15idcard (string idcard) {// non-15 битов являются false if (idcard.length ()! = 15) {return false; } // все числа if (isdigital (idcard)) {string provinceid = idcard.substring (0, 2); Строка рождения = idcard.substring (6, 12); int Год = integer.parseint (idcard.substring (6, 8)); int month = integer.parseint (idcard.substring (8, 10)); int day = integer.parseint (idcard.substring (10, 12)); // Определите, является ли это легальной провинцией Boolean Flag = false; for (String Id: CityCode) {if (id.equals (provinceid)) {flag = true; перерыв; }} if (! flag) {return false; } // Дата рождения этой идентификационной карты неверна после даты текущей даты даты рождения = null; try {withdate = new SimpleDateFormat ("yyMmdd"). Parse (день рождения); } catch (parseexception e) {e.printstacktrace (); } if (datedate == null || new date (). до (dirthdate)) {return false; } // Чтобы определить, является ли это законным годом gregoriancalendar curday = new gregoriancalendar (); int curyear = curday.get (calendar.year); int year2bit = integer.parseint (string.valueof (curyear) .substring (2)); //} // Чтобы определить, является ли это законным месяцем, если (месяц <1 || месяц> 12) {вернуть false; } // Чтобы определить, является ли это юридической датой логической mflag = false; curday.settime (дата рождения); // назначить дату рождения этой идентификационной карты на коммутацию Curday (месяц) {Случай 1: Случай 3: Случай 5: Случай 7: Случай 8: Случай 10: Случай 12: MFLAG = (Day> = 1 && Day <= 31); перерыв; Случай 2: // В феврале григорианского календаря проходит 28 дней и 29 дней в феврале лечебного года. if (curday.isleapyear (curday.get (calendar.year))) {mflag = (day> = 1 && day <= 29); } else {mflag = (day> = 1 && day <= 28); } перерыв; Случай 4: Случай 6: Случай 9: Случай 11: MFLAG = (Day> = 1 && Day <= 30); перерыв; } if (! mflag) {return false; }} else {return false; } вернуть true; } / ** * Конвертировать 15-значную идентификационную карту на 18-значную идентификационную карту * * @param idcard * @return * / public String convertidcarby15bit (String idcard) {String idcard17 = null; // не 15-битная идентификационная карта if (idcard.length ()! = 15) {return null; } if (isdigital (idcard)) {// Получить дату строки рождения. День рождения = idcard.substring (6, 12); Дата дата рождения = null; try {withdate = new SimpleDateFormat ("yyMmdd"). Parse (день рождения); } catch (parseexception e) {e.printstacktrace (); } Календарь cday = calendar.getInstance (); cday.settime (дата рождения); String Год = string.valueof (cday.get (calendar.year)); idcard17 = idcard.substring (0, 6) + Год + idcard.substring (8); char c [] = idcard17.thararray (); String checkCode = ""; if (null! = c) {int bit [] = new int [idcard17.length ()]; // конвертировать массив символов в целочисленную массив Bit = converchartoint (c); int sum17 = 0; sum17 = getPowerSum (bit); // Получить значение суммы и получить остаток, чтобы проверить код CODECODE = getCeckCodeBysum (sum17); // не может получить чек бит if (null == fectcode) {return null; } // Сплайс первые 17 цифр с 18 -й цифровой проверкой код idcard17 += fectcode; }} else {// Идентификационная карта содержит номер return null; } return idcard17; } / ** * Основная численная и цифровая проверка 15-битных и 18-битных номеров идентификационных карт * * @param idcard * @return * / public boolean isidcard (String idcard) {return idcard == null || ".. Equals (idcard)? false: pattern.matches ("(^// d {15} $) | (// d {17} (?: // d | x | x) $)", idcard); } / ** * Базовые цифры и цифры проверки для 15-значных идентификационных номеров * * @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); } / ** * Базовые номера и цифры проверки для 18-значного идентификационного номера * * @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); } / ** * Цифровая проверка * * @param str * @return * / public boolean isdigital (string str) {return str == null || ".. Equals (str)? false: str.matches ("^[0-9]*$"); } / ** * Умножьте каждый бит идентификационной карты и весовой коэффициент соответствующего бита, а затем получить значение суммы * * @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]; }}} return sum; } / ** * Проверьте значение суммы с 11, чтобы получить остаток для проверки кода * * @param feetcode * @param sum17 * @return rek bit * / public String getCeckCodeBysum (int sum17) {string checkcode = null; Switch (sum17 % 11) {case 10: fectcode = "2"; перерыв; Случай 9: CheckCode = "3"; перерыв; Случай 8: CheckCode = "4"; перерыв; Случай 7: CheckCode = "5"; перерыв; Случай 6: CheckCode = "6"; перерыв; Случай 5: CheckCode = "7"; перерыв; Случай 4: CheckCode = "8"; перерыв; Случай 3: CheckCode = "9"; перерыв; Случай 2: CheckCode = "x"; перерыв; Случай 1: CheckCode = "0"; перерыв; Case 0: fectCode = "1"; перерыв; } return checkcode; } / ** * Преобразовать массив символов в целочисленное массив * * @param c * @return * @throws numberformatexception * / public int [] converchartoint (char [] c) Throws formatorxception {int [] a = new int [c.length]; int k = 0; for (char temp: c) {a [k ++] = integer.parseint (string.valueof (temp)); } вернуть a; } public static void main (string [] args) бросает исключение {string idcard15 = "14243119001145"; // 15-битный string idcard18 = "121212121212121212121212"; // 18-битный idcardvalidator iv = new idcardvalator (); System.out.println (iv.isvalidatedallidcard (idcard15)); System.out.println (iv.isvalidatedallidcard (idcard18)); }}Извлечь информацию, связанную с идентификационной картой на основе номера удостоверения личности
Импорт java.text.simpledateformat; import java.util.calendar; import java.util.date; import java.util.gregoriancalendar; импорт java.util.hashmap; import java.util.map; импорт java.util.set;/** * <p> * класс. Idcardinfoextractor {// province Private String Province; // Городской частный строковый город; // районный и окружной частный строковый регион; // год частный год; // месяц частный месяц INT; // дата частного дня; // гендерный частный строковый пол; // дата рождения частная дата рождения; частная карта <string, string> cityCodemap = new HashMap <String, String> () {{this.put ("11", "pecijing"); this.put ("12", "tianjin"); this.put ("13", "hebei"); this.put ("14", "shanxi"); this.put ("15", "Внутренняя Монголия"); 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", "Хунань"); this.put ("44", "guangdong"); this.put ("45", "guangxi"); this.put ("46", "hainan"); this.put ("50", "Чунцин"); this.put ("51", "Sichuan"); this.put ("52", "guizhou"); this.put ("53", "yunnan"); this.put ("54", "Тибет"); this.put ("61", "shaanxi"); this.put ("62", "gansu"); this.put ("63", "Qinghai"); this.put ("64", "ningxia"); this.put ("65", "Синьцзян"); this.put ("71", "Тайвань"); this.put ("81", "Гонконг"); this.put ("82", "macao"); this.put ("91", "иностранный"); }}; Частный idcardvalidator varidator = null; / *** Инициализировать атрибут каждого элемента через конструктор*/ public idcardinfoextractor (string idcard) {try {valyator = new idcardvalidator (); if (valyator.isvalidatedallidcard (idcard)) {if (idcard.length () == 15) {idcard = validator.convertidcarby15bit (idcard); } // Получить провинцию 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); перерыв; }} // Получить гендерную строку id17 = idcard.substring (16, 17); if (integer.parseint (id17) % 2! = 0) {this.gender = "male"; } else {this.gender = "Женский"; } // Получить дату строки родов день рождения = idcard.substring (6, 14); Дата дата рождения = new SimpleDateFormat ("yyyyMmdd") .parse (день рождения); this.birthday = день рождения; Gregoriancalendar currentday = new gregoriancalendar (); currentDay.setTime (дата рождения); 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 the Province * / public String getProvince () {return Province; } / ** * @return the City * / public String getCity () {return City; } / ** * @return The Region * / public String getregion () {return region; } / ** * @return the Year * / public int getyear () {return Year; } / ** * @return the Month * / public int getMonth () {return Month; } / ** * @return the Day * / public int getDay () {return Day; } / ** * @return the Gender * / public String getGender () {return Gender; } / ** * @Return the Grentht * / public date getBirthday () {return birthday; } @Override public String toString () {return "Провинция:" + this.province + ", пол:" + this.gender + ", дата рождения:" + this.birthDay; } public static void main (string [] args) {string idcard = "1212121212121212121212"; Idcardinfoextractor IE = new idcardinfoextractor (idcard); System.out.println (IE.ToString ()); }}Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.