Verifikasi legalitas kartu ID Java dan dapatkan informasi yang valid dari nomor kartu ID untuk referensi Anda. Konten spesifiknya adalah sebagai berikut
Verifikasi legalitas kartu ID java
/** 6 digit pertama dari kartu ID [ABCDEF] adalah Kode Digital Divisi Administratif (lihat kode digital untuk singkat) Deskripsi (lihat "GB/T 2260-2007 Kode Divisi Administratif Republik Rakyat Tiongkok"): Prinsip dan analisis Struktur dari Kode Digital ini mengadopsi seorang penahan tiga digiten. Langsung di bawah pemerintah pusat, daerah administrasi khusus), * kota (wilayah, prefektur otonom, liga), dan kabupaten (kabupaten otonom, kota tingkat kabupaten, spanduk, spanduk otonom, distrik kota, wilayah hutan, distrik khusus) di Cina menurut hierarki. Arti dari struktur kode kode digital dari kiri ke kanan adalah: lapisan pertama adalah kode dua digit AB yang mewakili provinsi, wilayah otonom, kotamadya langsung di bawah pemerintah pusat, dan daerah administrasi khusus; Lapisan kedua adalah kode dua digit CD yang mewakili kode ringkasan dari kotamadya, wilayah, prefektur otonom, aliansi, dan kotamadya secara langsung di bawah pemerintah pusat, dan kode ringkasan divisi administrasi tingkat kabupaten secara langsung di bawah mulat (wilayah otonom), di antaranya adalah: ―01 ~ 20, 51 ~ 70 Kota, 0. 02. Di antaranya adalah: 02.01 ~ 20, 51 ~ 70 Kota, 0. 02. Di antaranya adalah: 02101 ~ 20, 51 ~ 70 Kota, 0. 0. Di antaranya adalah: ―01 ~ 20, 51 ~ 70 Kota, 0. 0. Di antaranya adalah: 02 ―01 ~ 20, 51 ~ 70 Kota, 0. 0. Di antaranya adalah: 02 ~ 201 ~ 20, 51 ~ 70 Kota, 0. 0. Di antaranya, 02 yang digunakan 01 ~ 20, 51 ~ 70 Kota, 0. 02 Digunakan. pemerintah; ―21 ~ 50 mewakili Ringkasan Kode Distrik, Prefektur Otonomi, Aliansi; ―90 mewakili kode ringkasan divisi administrasi tingkat kabupaten secara langsung di bawah provinsi (wilayah otonom). Lantai tiga adalah dua digit EF yang mewakili kabupaten, kabupaten otonom, kota-kota tingkat daerah, spanduk, spanduk otonom, distrik kota, kawasan hutan, dan distrik khusus. Di antara mereka: ―01 ~ 20 mewakili kota-kota tingkat kabupaten dengan kota-kota tingkat daerah di bawah yurisdiksi kota, distrik (prefektur otonom, liga) dan kota-kota tingkat daerah di bawah divisi administrasi tingkat kabupaten langsung di bawah yurisdiksi provinsi (wilayah otonom). 01 biasanya mewakili kode ringkasan yurisdiksi; ―21 ~ 80 mewakili kota-kota tingkat daerah di bawah yurisdiksi kabupaten, kabupaten otonom, spanduk, spanduk otonom, kawasan hutan, dan distrik khusus regional; ―81 ~ 99 mewakili kota-kota tingkat daerah di bawah yurisdiksi provinsi (wilayah otonom). */Impor java.text.parseexception; import java.text.simpledateFormat; impor java.util.calendar; impor java.util.date; import java.util.gregorcalendar; import java.util.hashmap; impor java.util.maper. <p> * Deskripsi Kelas: Verifikasi legalitas kartu ID * </p> * <p> * --15-digit Nomor ID: Digit ke-7 dan ke-8 adalah tahun kelahiran (digit ganda), digit ke-9 dan ke-10 adalah bulan kelahiran, angka ke-11 dan ke-12 mewakili tanggal kelahiran, digit ke-15 mewakili jenis kelamin, angka-angka yang benar-benar adalah laki-laki, dan bilangan fan, dan wanita yang sama sekali, dan wanita yang benar-benar laki-laki, dan bahasa perempuan, dan wanita yang sama sekali adalah wanita, dan bahasa perempuan, dan bilangan fan, dan bahasa perempuan, dan wanita yang sama sekali adalah wanita, dan bahasa perempuan, dan wanita yang hampir sama dengan perempuan, dan wanita yang laki-laki, dan bahasa perempuan, dan wanita yang sama sekali, dan wanita yang laki-laki, dan bilangan femal, dan wanita, dan femalah perempuan, dan bahasa perempuan, dan wanita bahkan perempuan. * --18-digit Nomor ID*: 7, 8, 9, dan 10 adalah tahun kelahiran (empat digit), 11 dan 12 adalah bulan kelahiran, 13 dan 14 mewakili tanggal lahir, 17 mewakili jenis kelamin, angka ganjil adalah laki-laki, dan bahkan angka adalah perempuan. * </p> */@SuppressWarnings ({"Uncecked", "Unsed", "All"}) Kelas Publik IDCardValidator {/** * Provinsi, Tabel Kode Kota: {11: "Beijing", 12: "Tianjin", 13: "HeBei", 14: "Shanx", "Shanxi", "Shanxi", "HEI", 14: "Shanx", 22: "Jilin", 23: "Heilongjiang", 31: "Shanghai", 32: "Jiangsu", * 33: "Zhejiang", 34: "Anhui", 35: "Fujian", 36: "Jiangxi", 37: "Shandong", 41: "41:" ":" 41: "": "41:" ":" 41: "41:" Henan "," Jiangxi ", 37:" Shandong "," 42: "Hubei", 43: "Hunan", 44: "Guangdong", 45: "Guangxi", 46: "Hainan", 50: "Chongqing", * 51: "Sichuan", 52: "Guizhou", 53: "Yunnan", 54: "Tibet", "64:" Tibet "," Yunnan "," 54: "Tibet", "Tibet", "Tibet", " 63: "Qinghai", 64: "Ningxia", 65: "Xinjiang", 71: "Taiwan", 81: "Hong Kong", 82: "Macao", 91: "Asing"} */ String CodeAndcity [] [] [] = {"11" "" "" "13", "hebei"}, {"14", "shanxi"}, {"15", "bagian dalam mongolia"}, {"21", "liaoning"}, {"22", "Jilin"}, {"23", "heilongjiang", "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " "Jiangsu"}, {"33", "Zhejiang"}, {"34", "Anhui"}, {"35", "Fujian"}, {"36", "Jiangxi"}, "37", "Shandong", "" "41" "41", "" 41 "," "" 41 "," "" "" "" "" "" "" "" "" "" }, {"43", "hunan"}, {"44", "Guangdong"}, {"45", "Guangxi"}, {"46", "Hainan"}, {"50", "Chongqing"}, {"51", "SICHUAN"}, "}," {"{" 51 "," 51, "{" {"{" {"{" {"{" {"{" {"{" {"{" {"{" {"{" {"{" {"{" 5 "Yunnan"}, {"54", "tibet"}, {"61", "shaanxi"}, {"62", "gansu"}, {"63", "qinghai"}, {"64", "ningxia"}, "65" "65" "65" "65", "" 65 "," "65", "" 65 "," 65 "," 65 "," 65, "" }, {"81", "Hong Kong"}, {"82", "Macao"}, {"91", "asing"}}; Private String CityCode [] = {"11", "12", "13", "14", "15", "21", "22", "23", "31", "32", "33", "34", "35", "36", "37", "41", "42", "43", "44", "44", "41", "42", "43", "44", "44", "44", "44", "41", "42", "42", "42", "42," 42, "42," 42, "42", "42", " "52", "53", "54", "61", "62", "63", "64", "65", "71", "81", "82", "91"}; // Setiap faktor pembobotan pribadi int power [] = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2}; // Kode Verifikasi Bit ke -18 Private String VerifyCode [] = {"1", "0", "x", "9", "8", "7", "6", "5", "4", "3", "2"}; / ** * Verifikasi legalitas semua kartu id * * @param idcard * @return */ public boolean isValidedIdedAllIdcard (string idcard) {if (idcard.length () == 15) {idcard = this.conVertIdCarby15bit (idcard); } return this.isValidate18IdCard (IDCard); } /** * <p> * Tentukan legalitas kartu ID 18 digit * </p> * Menurut ketentuan pada nomor ID kewarganegaraan dalam standar nasional GB11643-1999 dari Republik Rakyat Tiongkok, kode ID kewarganegaraan adalah kode kombinasi fitur, yang terdiri dari kode ontologi digital tujuh belas digit. * Pesanan pengaturan adalah dari kiri ke kanan: kode alamat enam digit, tanggal delapan digit kode kelahiran, kode urutan tiga digit dan kode verifikasi satu digit. * <p> * Kode urutan: Menunjukkan nomor urutan yang ditugaskan untuk orang yang lahir pada tahun yang sama, bulan, dan hari di dalam area yang diidentifikasi oleh kode alamat yang sama. Jumlah ganjil dari kode urutan ditugaskan untuk pria dan bahkan nomor ditugaskan untuk wanita. * </p> * <p> * 1. 1 dan 2 digit pertama mewakili: Kode provinsi; 2. Digit ke -3 dan ke -4 mewakili: Kode Kota; 3. Digit ke -5 dan ke -6 mewakili: Kode Distrik dan Kabupaten; * 4. Digit 7 hingga 14 mewakili: Tahun, Bulan, Hari Kelahiran; 5. Digit ke -15 dan ke -16 mewakili: Kode kantor polisi di lokasi; * 6. Digit ke -17 mewakili gender: Angka ganjil mewakili laki -laki, dan bahkan angka mewakili wanita; * 7. Digit ke -18 adalah kode proofreading: beberapa mengatakan itu adalah kode informasi pribadi, yang umumnya dihasilkan secara acak oleh komputer untuk memeriksa kebenaran kartu ID. Kode kalibrasi dapat berupa angka dari 0 hingga 9, dan kadang -kadang juga diwakili oleh x. * </p> * <p> * Metode perhitungan digit kedelapan belas (kode periksa) adalah: 1. Gandakan nomor 17 digit dari nomor ID sebelumnya dengan koefisien yang berbeda. Koefisien dari digit pertama ke digit ketujuh belas adalah: 7 9 10 5 8 4 * 2 1 6 3 7 9 10 5 8 4 2 * </p> * <p> * 2. Tambahkan hasil dari pengalikan angka dan koefisien 17 digit ini. * </p> * <p> * 3. Gunakan penambahan dan bagi 11 untuk melihat apa sisanya? * </p> * 4. Sisa hanya dapat memiliki 11 angka 0 1 2 3 4 5 6 7 8 9 10. Jumlah kartu ID terakhir yang sesuai dengan masing -masing adalah 1 0 x 9 8 7 6 5 4 3 * 2. * <p> * 5. Dari di atas, jika sisanya adalah 2, ⅹ angka Romawi akan muncul pada digit ke -18 dari kartu ID. Jika sisanya adalah 10, jumlah terakhir dari kartu ID adalah 2. * </p> * * @param idcard * @return */ public boolean isValidate18idcard (string idcard) {// bit non-18 adalah false if (idcard.length ()! = 18) {return false; } // Dapatkan 17 bit pertama string idcard17 = idcard.substring (0, 17); // Dapatkan string bit ke -18 IDCARD18Code = idcard.substring (17, 18); char c [] = null; String checkCode = ""; // adalah semua angka jika (isDigital (idcard17)) {c = idcard17.tochararray (); } else {return false; } if (null! = c) {int bit [] = int new [idcard17.length ()]; bit = converchartoint (c); int sum17 = 0; sum17 = getPowersum (bit); // Periksa nilai jumlah dengan 11 untuk mendapatkan sisa untuk kode verifikasi CheckCode = getCheckCodeBysum (sum17); if (null == checkCode) {return false; } // Cocokkan bit ke -18 dari kartu ID dengan kode kalibrasi yang dihitung. Jika tidak sama, itu adalah FALSE IF (! IDCARD18CODE.EQUALIGNECASE (CHECKCODE)) {return false; }} return true; } /*** Verifikasi legalitas kartu ID 15-bit. Metode ini tidak akurat. Yang terbaik adalah mengonversi 15 menjadi 18-bit sebelum dilihat, yang telah disediakan di kelas ini. * * @param idcard * @return */ public boolean isValidate15Idcard (string idcard) {// bit non-15 false if (idcard.length ()! = 15) {return false; } // adalah semua angka jika (isDigital (idcard)) {string provinceId = idcard.substring (0, 2); String ulang tahun = idcard.substring (6, 12); int tahun = integer.parseint (idcard.substring (6, 8)); int bulan = integer.parseint (idcard.substring (8, 10)); int day = integer.parseint (idcard.substring (10, 12)); // Tentukan apakah itu bendera boolean provinsi hukum = false; untuk (string id: citycode) {if (id.equals (provinceId)) {flag = true; merusak; }} if (! flag) {return false; } // Tanggal lahir kartu ID ini salah setelah tanggal saat ini tanggal lahir = null; Coba {BirthDate = new SimpleDateFormat ("yymmdd"). Parse (ulang tahun); } catch (parseException e) {e.printstacktrace (); } if (birthDate == null || Tanggal baru (). Sebelum (BirthDate)) {return false; } // Untuk menentukan apakah itu tahun hukum Gregoriancalendar Curday = GregorianCalendar () baru; int curyear = curday.get (calendar.year); int tahun2bit = integer.parseint (string.valueof (curyear) .substring (2)); //} // Untuk menentukan apakah itu bulan legal jika (bulan <1 || bulan> 12) {return false; } // Untuk menentukan apakah itu tanggal hukum boolean mflag = false; Curday.Settime (Tanggal lahir); // Tetapkan tanggal kelahiran kartu ID ini ke sakelar Curday Objek (bulan) {Kasus 1: Kasus 3: Kasus 5: Kasus 7: Kasus 8: Kasus 10: Kasus 12: mflag = (hari> = 1 && Hari <= 31); merusak; Kasus 2: // Ada 28 hari di bulan Februari Kalender Gregorian, dan 29 hari di bulan Februari tahun kabisat. if (curday.isleapyear (curday.get (calendar.year))) {mflag = (day> = 1 && day <= 29); } else {mflag = (day> = 1 && day <= 28); } merusak; Kasus 4: Kasus 6: Kasus 9: Kasus 11: mflag = (hari> = 1 && hari <= 30); merusak; } if (! mflag) {return false; }} else {return false; } return true; } / ** * Konversi kartu ID 15 digit ke kartu ID 18 digit * * @param idcard * @return * / public String ConvertIdCarby15bit (string idcard) {string idcard17 = null; // kartu ID non-15-bit if (idcard.length ()! = 15) {return null; } if (isDigital (idcard)) {// Dapatkan tanggal ulang tahun kelahiran = idcard.substring (6, 12); Tanggal BirthDate = NULL; Coba {BirthDate = new SimpleDateFormat ("yymmdd"). Parse (ulang tahun); } catch (parseException e) {e.printstacktrace (); } Calendar cday = calendar.getInstance (); cday.settime (kelahiran); String tahun = string.valueof (cday.get (calendar.year)); idcard17 = idcard.substring (0, 6) + tahun + idcard.substring (8); char c [] = idcard17.tochararray (); String checkCode = ""; if (null! = c) {int bit [] = int new [idcard17.length ()]; // Konversi array karakter menjadi array integer bit = converchartoint (c); int sum17 = 0; sum17 = getPowersum (bit); // Dapatkan nilai SUM dan dapatkan sisanya untuk memeriksa kode checkCode = getCheckCodeBysum (sum17); // tidak bisa mendapatkan bit check if (null == checkCode) {return null; } // Sambungkan 17 digit pertama dengan kode periksa digit ke -18 IDCard17 += CheckCode; }} else {// kartu ID berisi nomor pengembalian null; } return IDCard17; } / ** * Verifikasi numerik dan digit dasar nomor kartu ID 15-bit dan 18-bit * * @param idcard * @return * / public boolean isidcard (string idcard) {return idcard == null || "" .Equals (IDCard)? false: pola.matches ("(^// d {15} $) | (// d {17} (?: // d | x | x) $)", idcard); } / ** * Digit dasar dan digit cek untuk nomor ID 15 digit * * @param idcard * @return * / public boolean is15idcard (string idcard) {return idcard == null || "" .Equals (IDCard)? false: pola.matches ("^[1-9] // d {7} (0 // d) | (1 [0-2])) (([0 | 1 | 2] // D) | 3 [0-1]) // D {3} $", IDCard); } / ** * Nomor Dasar dan Digit cek untuk nomor ID 18 digit * * @param idcard * @return * / public boolean is18idcard (string idcard) {return pola .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}) $", kartu card); } / ** * Verifikasi digital * * @param str * @return * / public boolean isDigital (string str) {return str == null || "" .Equals (str)? false: str.matches ("^[0-9]*$"); } / ** * Lipat gandakan setiap bit kartu ID dan faktor pembobotan bit yang sesuai, dan kemudian dapatkan nilai jumlah * * @param bit * @return * / public int getPowersum (int [] bit) {int sum = 0; if (power.length! = bit.length) {return sum; } untuk (int i = 0; i <bit.length; i ++) {for (int j = 0; j <power.length; j ++) {if (i == j) {sum = bit bit [i] * power [j]; }}} return sum; } / ** * Periksa nilai jumlah dengan 11 untuk mendapatkan sisa untuk kode verifikasi * * @param checkCode * @param sum17 * @return check bit * / public string getCheckCodeBysum (int sum17) {string checkCode = null; switch (sum17 % 11) {case 10: checkCode = "2"; merusak; Kasus 9: CheckCode = "3"; merusak; Kasus 8: CheckCode = "4"; merusak; Kasus 7: CheckCode = "5"; merusak; Kasus 6: CheckCode = "6"; merusak; Kasus 5: CheckCode = "7"; merusak; Kasus 4: CheckCode = "8"; merusak; Kasus 3: CheckCode = "9"; merusak; case 2: checkCode = "x"; merusak; Kasus 1: CheckCode = "0"; merusak; case 0: checkCode = "1"; merusak; } return checkCode; } / ** * Konversi array karakter menjadi array integer * * @param c * @return * @throws NumberFormateException * / public int [] converChartoint (char [] c) melempar NumberFormateException {int [] a = int baru [c.length]; int k = 0; untuk (char temp: c) {a [k ++] = integer.parseint (string.valueof (temp)); } return a; } public static void main (string [] args) melempar pengecualian {string idcard15 = "142431199001145"; // 15-bit string idCard18 = "121212121212121212121212"; // 18-bit idcardval iv = noeloror; System.out.println (iv.isvalidededAllidCard (IDCard15)); System.out.println (iv.isvalidededAllidCard (IDCard18)); }}Ekstrak informasi yang terkait dengan kartu ID berdasarkan nomor kartu ID
Impor java.text.simpledateFormat; impor java.util.calendar; impor java.util.date; import java.util.gregoriancalendar; impor java.util.hashmap; impor java.util.map; impor java.util.etil;/** <prading/classies: classion. IDCardInfoExtractor {// Provinsi Provinsi Private String; // City Private String City; // Wilayah String Privat Distrik dan Kabupaten; // tahun int swasta tahun; // Bulan Int Private Int; // Tanggal hari int pribadi; // gender gender pribadi gender; // Tanggal Lahir Ulang Tahun Pribadi; peta pribadi <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", "Inner Mongolia"); 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", "asing"); }}; validator idcardvalidator pribadi = null; / *** Inisialisasi setiap atribut anggota melalui konstruktor*/ public IDCardInfoExtractor (String idCard) {coba {validator = new idCardValidator (); if (validator.isValidedIdedAldCard (idCard)) {if (idcard.length () == 15) {idCard = validator.conVertIdCarby15bit (idCard); } // Dapatkan provinsi string provinceId = idcard.substring (0, 2); Atur <string> key = this.citycodemap.keyset (); untuk (string id: key) {if (id.equals (provinceId)) {this.province = this.citycodemap.get (id); merusak; }} // Dapatkan string gender ID17 = idcard.substring (16, 17); if (integer.parseint (id17) % 2! = 0) {this.gender = "pria"; } else {this.gender = "betina"; } // Dapatkan tanggal ulang tahun kelahiran = idcard.substring (6, 14); Tanggal lahir = new SimpleDateFormat ("yyyymmdd") .parse (ulang tahun); this.birthday = ulang tahun; Gregoriancalendar Currentday = Gregoriancalendar () baru; Currentday.Settime (BirthDate); 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 provinsi * / public string getProvince () {return province; } / ** * @return The City * / Public String getCity () {return city; } / ** * @return wilayah * / string publik getregion () {return region; } / ** * @return tahun * / public int getYear () {return tahun; } / ** * @return bulan * / public int getMonth () {bulan kembali; } / ** * @return hari * / public int getDay () {return day; } / ** * @return The Gender * / Public String getGender () {return gender; } / ** * @return The Birthday * / Public Date getBirthday () {return ulang tahun; } @Override public string toString () {return "provinsi:" + this.province + ", gender:" + this.gender + ", tanggal lahir:" + this.birthday; } public static void main (string [] args) {string idcard = "1212121212121212121212"; IDCardInfoExtractor IE = IDCardInfoExtractor baru (IDCard); System.out.println (ie.tostring ()); }}Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.