Java ID CARD SELECTIONATION والحصول على معلومات صالحة لرقم بطاقة الهوية للرجوع إليه. المحتوى المحدد كما يلي
التحقق من شرعية بطاقة هوية Java
/** إن الأرقام الستة الأولى من بطاقة الهوية [ABCDEF] هي الرموز الرقمية الإدارية (الرجوع إلى الكود الرقمي للوصف القصير) (ارجع إلى "GB/T 2260-2007 قسم القسم الإداري لجمهورية الصين الشعبية"):*المبدأ والهيكل لمجموعة هذا القانون الرقمي يتبنى هيكل الكود الستة الموغدين ، الذي يمثله. مباشرة في ظل الحكومة المركزية ، المناطق الإدارية الخاصة) ، * المدن (المناطق ، المحافظات المستقلة ، الدوريات) ، والمقاطعات (المقاطعات المستقلة ، المدن على مستوى المقاطعة ، لافتات ، لافتات مستقلة ، المناطق البلدية ، مناطق الغابات ، المناطق الخاصة) في الصين وفقًا للتسلسل الهرمي. معنى بنية رمز الكود الرقمي من اليسار إلى اليمين هو: الطبقة الأولى هي رمز من رقمين تمثل المقاطعة والمنطقة المستقلة والبلدية مباشرة في ظل الحكومة المركزية والمناطق الإدارية الخاصة ؛ الطبقة الثانية هي رمز CD المكون من رقمين يمثل مدونة الملخص للبلدية ، والمنطقة ، والدوائر المستقلة ، والتحالف ، والبلدية مباشرةً بموجب الحكومة المركزية ، والمدونة الملخص للانقسامات الإدارية على مستوى المقاطعة ، تمثل أيضًا المجلس المدعى عليه مباشرةً تحت المدعية المخصصة ، كما تمثل المجلس المدعى عليه أيضًا المدعى على المدعية المخصصة أيضًا ، حيث تمثل المدعية المدعمة أيضًا على المدعية المخصصة لما تمثلها أيضًا في المدعية المخصصة. الحكومة المركزية - 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 ؛ import java.util.greasiancalendar ؛ <p> * وصف الفئة: التحقق من شرعية بطاقة الهوية * </p> * <p> * -15 رقم معرف الرقم: الرقمين 7 و 8 هما عام الولادة (الأرقام المزدوجة) ، والرقم التاسع والعاشر هو الشهر الولادة ، والرقمين 11 و 12 تمثل تاريخ الميلاد ، ويمثل الأرقام الخامسة بين الجنسين ، والأرقام الفردية هي الذكور ، والرقم حتى فيثميس. * -18 رقم معرف الرقم رقم*: 7 و 8 و 9 و 10 هي سنة الميلاد (أربعة أرقام) ، 11 و 12 هي شهر الميلاد ، 13 و 14 يمثلان تاريخ الميلاد ، 17 تمثل الجنس ، والأرقام الفردية من الذكور ، وحتى الأرقام من الإناث. * </p> */@cumpresswarnings ({"Unchected" ، "غير مستخدم" ، "الكل"}) الفئة العامة idcardvalidator {/** * Provincial ، table البلدية: {11: "beijing" ، 12: 22: "Jilin" ، 23: "Heilongjiang" ، 31: "Shanghai" ، 32: "Jiangsu" ، * 33: "Zhejiang" ، 34: "Anhui" ، 35: 42: "Hubei" ، 43: "Hunan" ، 44: "Guangdong" ، 45: "Guangxi" ، 46: "Hainan" ، 50: "chongqing" ، * 51: 63: "Qinghai" ، 64: "Ningxia" ، 65: "Xinjiang" ، 71: "Taiwan" ، 81: "Hong Kong" ، 82: "Macao" ، 91: "Foreign" */ Protected String CodeAndcity [] = {{"11" "13" ، "hebei"} ، {"14" ، "shanxi"} ، {"15" ، "Inner Mongolia"} ، {"21" ، "Liaoning"} ، {"22" ، jilin "} ، {" 23 " "jiangsu"} ، {"33" ، "Zhejiang"} ، {"34" ، "anhui" ، {"35" ، "fujian"} ، {"36" ، "jiangxi" ، {"37" ، "Shandong" ، {"41" ، " } ، {"43" ، "Hunan"} ، {"44" ، "Guangdong"} ، {"45" ، "Guangxi"} ، {"46" ، "Hainan"} ، {"50" ، "chongqing"} ، "yunnan"} ، {"54" ، "tibet"} ، {"61" ، "shaanxi"} ، {"62" ، "gansu"} ، {"63" ، "qinghai"} ، {"64" ، "ningxia" ، {"65" ، " } ، {"81" ، "Hong Kong"} ، {"82" ، "Macao"} ، {"91" ، "Foreign"}} ؛ سلسلة خاصة CityCode [] = {"11" ، "12" ، "13" ، "14" ، "15" ، "21" ، "22" ، "23" ، "31" ، "32" ، "33" ، "34" ، "35" ، "35" ، "51" ، "51" ، "51" ، "51" ، "52" ، "53" ، "54" ، "61" ، "62" ، "63" ، "64" ، "65" ، "71" ، "81 ،" 82 "،" 91 "} ؛ // كل عامل ترجيح خاص Power Int [] = {7 ، 9 ، 10 ، 5 ، 8 ، 4 ، 2 ، 1 ، 6 ، 3 ، 7 ، 9 ، 10 ، 5 ، 8 ، 4 ، 2} ؛ // رمز التحقق من بتات 18th سلسلة خاصة VerifyCode [] = {"1" ، "0" ، "X" ، "9" ، "8" ، "7" ، "6" ، "5" ، "4" ، "3" ، "2"} ؛ / ** * تحقق من شرعية جميع بطاقات الهوية * * param idcard * return */ public boolean isValidatedAledAldCard (String idcard) {if (idcard.length () == 15) {idcard = this.convertidcarby15bit (idcard) ؛ } إرجاع this.isvalidate18idcard (idcard) ؛ } /** * <p> * حدد شرعية بطاقة الهوية المكونة من 18 رقماً * </p> * وفقًا للأحكام المتعلقة بأرقام معرف المواطنة في المعيار الوطني GB11643-1999 من جمهورية الصين الشعبية ، فإن رقم معرف المواطنة هو رمز مزيج ميزة ، يتكون من رمز الرقمي الرقمي في 717 درجة. * ترتيب الترتيب من اليسار إلى اليمين: رمز العنوان المكون من ستة أرقام ، ورمز ميلاد مكون من ثمانية أرقام ، ورمز التسلسل المكون من ثلاثة أرقام ، ورمز التحقق من رقم واحد. * <p> * رمز التسلسل: يشير إلى رقم التسلسل المخصص للأشخاص المولودين في نفس العام والشهر واليوم داخل المنطقة المحددة بواسطة رمز العنوان نفسه. يتم تعيين العدد الفردي لرمز التسلسل للرجال ويتم تعيين عدد حتى للنساء. * </p> * <p> * 1. تمثل الرقم الأول والثاني الأول: مدونة المقاطعة ؛ 2. الأرقام الثالثة والرابعة تمثل: رمز المدينة ؛ 3. الأرقام الخامسة والسادسة تمثل: مدونة المقاطعة والمقاطعة ؛ * 4. تمثل الرقم 7 إلى 14: السنة ، الشهر ، يوم الميلاد ؛ 5. تمثل الرقمين الخامس عشر والسادس عشر: مدونة مركز الشرطة في الموقع ؛ * 6. تمثل الأرقام السابعة عشرة الجنس: تمثل الأرقام الفردية الذكور ، وحتى الأرقام تمثل الإناث ؛ * 7. الرقم الثامن عشر هو رمز التصحيح: يقول البعض إنه رمز معلومات شخصية ، يتم إنشاؤه بشكل عشوائي بشكل عشوائي من قبل الكمبيوتر للتحقق من صحة بطاقة الهوية. يمكن أن يكون رمز المعايرة رقمًا من 0 إلى 9 ، وأحيانًا يتم تمثيله أيضًا بـ X. * </p> * <p> * طريقة الحساب للرقم الثامن عشر (Check Code) هي: 1. اضرب الرقم المكون من 17 رقمًا من رقم المعرف السابق بواسطة معاملات مختلفة. المعاملات من الرقم الأول إلى الرقم السابع عشر هي: 7 9 10 5 8 4 * 2 1 6 3 7 9 10 5 8 4 2 * </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. إذا كان الباقي هو 10 ، فإن الرقم الأخير من بطاقة الهوية هو 2. * </p> * * param idcard * @RETURN */ public boolean isValidate18IDcard (String idcard) {// non-18 بتات خاطئة إذا (idcard.length ()! = 18) {return false ؛ } // احصل على أول 17 بت سلسلة idcard17 = idcard.substring (0 ، 17) ؛ // احصل على سلسلة البت 18 IdCard18Code = idcard.substring (17 ، 18) ؛ char c [] = null ؛ سلسلة checkCode = "" ؛ // كلها أرقام إذا (isDigital (idcard17)) {c = idcard17.tochararray () ؛ } آخر {return false ؛ } if (null! = c) {int bit [] = new int [idcard17.length ()] ؛ bit = converChartoint (c) ؛ int sum17 = 0 ؛ sum17 = getPowersum (بت) ؛ // تحقق من قيمة المجموع مع 11 للحصول على الباقي للحصول على رمز رمز التحقق = getCheckCodeBysum (sum17) ؛ if (null == checkcode) {return false ؛ } // تطابق الجزء الثامن عشر من بطاقة الهوية مع رمز المعايرة المحسوب. إذا لم يكن متساوًا ، فهو خطأ إذا (! idcard18code.equalsInsIgnoreCase (checkCode)) {return false ؛ }} إرجاع صحيح ؛ } /*** تحقق من شرعية بطاقة الهوية 15 بت. هذه الطريقة غير دقيقة. من الأفضل تحويل 15 إلى 18 بت قبل الحكم ، والذي تم توفيره في هذا الفصل. * * param idcard * regurn */ public boolean isValidate15IdCard (سلسلة idcard) {// non-15 بتات خاطئة إذا (idcard.length ()! = 15) {return false ؛ } // كلها أرقام إذا (isDigital (idcard)) {String provinceId = idcard.substring (0 ، 2) ؛ سلسلة عيد ميلاد = idcard.substring (6 ، 12) ؛ int year = integer.parseint (idcard.substring (6 ، 8)) ؛ int month = integer.parseint (idcard.substring (8 ، 10)) ؛ int day = integer.parseint (idcard.substring (10 ، 12)) ؛ // لـ (string id: cityCode) {if (id.equals (provinceId)) {flag = true ؛ استراحة؛ }} if (! flag) {return false ؛ } // تاريخ الميلاد لبطاقة الهوية هذه خطأ بعد تاريخ الميلاد التاريخ الحالي = NULL ؛ Try {birthdate = new SimpleDateFormat ("yymmdd"). parse (عيد ميلاد) ؛ } catch (parseException e) {E.PrintStackTrace () ؛ } if (birthdate == null || date () } // لتحديد ما إذا كانت السنة القانونية gregoriancalendar curday = new GregorianCalendar () ؛ int curyear = curday.get (calendar.year) ؛ int enh year2bit = integer.parseint (string.valueof (curyear) .SubString (2)) ؛ //} // لتحديد ما إذا كان شهرًا قانونيًا إذا (الشهر <1 || الشهر> 12) {return 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) ؛ } آخر {mflag = (day> = 1 && day <= 28) ؛ } استراحة؛ الحالة 4: الحالة 6: الحالة 9: الحالة 11: mflag = (day> = 1 && day <= 30) ؛ استراحة؛ } if (! mflag) {return false ؛ }} آخر {return false ؛ } إعادة صواب ؛ } / ** * قم بتحويل بطاقة هوية مكونة من 15 رقماً إلى بطاقة معرف مكونة من 18 رقماً * * param idcard * return * / السلسلة العامة collectidcarby15bit (سلسلة idcard) {String IdCard17 = null ؛ // بطاقة معرف غير 15-bit if (idcard.length ()! = 15) {return null ؛ } if (isDigital (idcard)) {// احصل على تاريخ ميلاد الولادة = idcard.substring (6 ، 12) ؛ تاريخ تاريخ الميلاد = فارغ ؛ Try {birthdate = new SimpleDateFormat ("yymmdd"). parse (عيد ميلاد) ؛ } catch (parseException e) {E.PrintStackTrace () ؛ } Calendar cday = calendar.getInstance () ؛ Cday.Settime (تاريخ الميلاد) ؛ string year = string.valueof (cday.get (calendar.year)) ؛ idcard17 = idcard.substring (0 ، 6) + year + idcard.substring (8) ؛ char c [] = idcard17.tochararray () ؛ سلسلة checkCode = "" ؛ if (null! = c) {int bit [] = new int [idcard17.length ()] ؛ // قم بتحويل صفيف الأحرف إلى مجموعة عدد صحيح = ConverChartoint (C) ؛ int sum17 = 0 ؛ sum17 = getPowersum (بت) ؛ // احصل على قيمة المجموع واحصل على الباقي للتحقق من CodeCode = getCheckCodeBysum (sum17) ؛ لا يمكن الحصول على بت الشيك إذا (null == checkcode) {return null ؛ } // لصق أول 17 رقمًا مع رمز التحقق من الرقم الثامن عشر IDCARD17 += CheckCode ؛ }} آخر {// بطاقة الهوية تحتوي على الرقم الإرجاع null ؛ } إرجاع idcard17 ؛ } / ** * التحقق العددي والرقم الأساسي لأرقام بطاقة هوية 15 بت و 18 بت * * param idcard * @return * / public boolean isidcard (سلسلة idcard) {return idcard == null || "" .equals (idcard)؟ false: pattern.matches ("(^// d {15} $) | (// d {17} (؟: // d | x | x) $)" ، idcard) ؛ } / ** * يتحقق الأرقام والأرقام الأساسية لأرقام معرف 15 رقمًا * * param idcard * regurn * / public boolean IS15IDCard (سلسلة 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 (سلسلة 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 || ".". false: str.matches ("^[0-9]*$") ؛ } / ** * اضرب كل بت من بطاقة الهوية وعامل الترجيح للبت المقابلة ، ثم احصل على قيمة sum * * param bit * regurn * / public int getPowersum (int [] bit) {int sum = 0 ؛ if (power.length! = bit.length) {return sum ؛ } لـ (int i = 0 ؛ i <bit.length ؛ i ++) {for (int j = 0 ؛ j <power.length ؛ j ++) {if (i == j) {sum = sum+bit [i] * power [j] ؛ }}} إرجاع مجموع ؛ } / ** * تحقق من قيمة SUM مع 11 للحصول على الباقي للحصول على رمز التحقق * * param checkode * param sum17 * return check bit * / public string getCheckCodeBysum (int sum17) {string checkdcode = null ؛ Switch (sum17 ٪ 11) {case 10: checkCode = "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" ؛ استراحة؛ الحالة 0: CheckCode = "1" ؛ استراحة؛ } checkcode return ؛ } / ** * تحويل صفيف حرف إلى صفيف عدد صحيح * * param c * return * throws numberFormatexception * / public int [] converChartoint (char [] c) يلقي numberformatexception {int [] a = new int [c.length] ؛ int k = 0 ؛ لـ (temp temp: c) {a [k ++] = integer.parseint (string.valueof (temp)) ؛ } إرجاع أ ؛ } static void main (string [] args) يلقي الاستثناء {string idcard15 = "142431199001145" ؛ // 15-bit string idcard18 = "1212121212121212121212" System.out.println (IV.IsvalidatedAllIdcard (IDCard15)) ؛ System.out.println (IV.IsvalidatedAllIdcard (IDCard18)) ؛ }}استخراج المعلومات المتعلقة ببطاقة الهوية بناءً على رقم بطاقة الهوية
استيراد java.text.simpleDateFormat ؛ استيراد java.util.calendar ؛ استيراد java.util.date ؛ استيراد java.util.greiancalendar IdCardInfoExtractor {// Province Private String Province ؛ // مدينة المدينة الخاصة ؛ // منطقة المنطقة الخاصة بالمقاطعة والمقاطعة ؛ // السنة الخاصة العام الخاص ؛ // شهر الشهر الخاص // Date Private Int Day ؛ // جنس السلسلة الخاصة ؛ // تاريخ الميلاد تاريخ ميلاد خاص ؛ الخريطة الخاصة <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" ، "منغوليا الداخلية") ؛ 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" ، "التبت") ؛ this.put ("61" ، "Shaanxi") ؛ this.put ("62" ، "Gansu") ؛ this.put ("63" ، "Qinghai") ؛ this.put ("64" ، "ningxia") ؛ this.put ("65" ، "Xinjiang") ؛ this.put ("71" ، "تايوان") ؛ this.put ("81" ، "Hong Kong") ؛ this.put ("82" ، "Macao") ؛ this.put ("91" ، "أجنبي") ؛ }} ؛ idcardvalidator الخاص المدقق = فارغ ؛ / *** تهيئة كل سمة عضو من خلال مُنشئ*/ IdCardInfoExtractor (سلسلة idcard) {try {dealator = idcardvalidator () جديد ؛ if (devalator.isvalidatedAllIdCard (idcard)) {if (idcard.length () == 15) {idcard = devalator.convertidcarby15bit (idcard) ؛ } // احصل على سلسلة المقاطعة ProvinceId = idcard.substring (0 ، 2) ؛ SET <STRING> key = this.citycodemap.keyset () ؛ لـ (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" ؛ } آخر {this.gender = "female" ؛ } // احصل على تاريخ عيد ميلاد سلسلة الميلاد = idcard.substring (6 ، 14) ؛ تاريخ ميلاد تاريخ = جديد simpleDateFormat ("Yyyymmdd") .Parse (عيد ميلاد) ؛ this.birthday = عيد ميلاد ؛ GregorianCalendar Currentday = GregorianCalendar () الجديد ؛ Currentday.Settime (تاريخ الميلاد) ؛ this.year = currentday.get (calendar.year) ؛ this.month = currentday.get (calendar.mon) + 1 ؛ this.day = currentday.get (calendar.day_of_month) ؛ }} catch (استثناء e) {E.PrintStackTrace () ؛ }} / ** * RETURN The Province * / public String getProvince () {Return Province ؛ } / ** * @RETURN The City * / Public String getCity () {return City ؛ } / ** * @RETURN المنطقة * / السلسلة العامة getRegion () {return region ؛ } / ** * @Regurn the Year * / public int getyear () {return year ؛ } / ** * @Regurn the Month * / public int getMonth () {return month ؛ } / ** * regurn the day * / public int getDay () {return day ؛ } / ** * @RETURN الجنس * / السلسلة العامة getGender () {return الجنس ؛ } / ** * @إعادة عيد ميلاد * / التاريخ العام getBirthday () {return birthday ؛ } Override Public String ToString () {return "المقاطعة:" + this.province + "، الجنس:" + this.gender + "، تاريخ الميلاد:" + this.birthday ؛ } الفراغ الثابت العام (سلسلة [] args) {string idcard = "1212121212121212121212" ؛ idcardInfoExtractor ie = idcardinfoextractor جديد (idcard) ؛ system.out.println (ie.toString ()) ؛ }}ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.