import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main{ public static void main(String[] args) { Scanner sc = new Scanner(System.in); // 输入身份证个数 int n = sc.nextInt(); sc.nextLine(); String[] str = new String[n]; // 输入身份证 for (int i = 0; i < str.length; i++) { str[i] = sc.nextLine(); } // 计数器 int count = 0; for (int i = 0; i < n; i++) { boolean b = isPrime(str[i]); if (b){ boolean bb = jishuan(str[i]); if (bb){ count++; continue; }else { System.out.println(str[i]); } }else{ System.out.println(str[i]); } } // 判断是否全部正确 if(count == n){ System.out.println("All passed"); } } // 判断身份证前十七位数字是否全为数字 public static boolean isPrime(String str){ try{ String string = str.substring(0,16); Pattern pattern = Pattern.compile("-?[0-9]+\\.?[0-9]*"); Matcher isNum = pattern.matcher(string); if (!isNum.matches()) { return false; } return true; // 捕捉异常 }catch (NullPointerException e){ return false; } } // 对前十七位数字加权求和,并判断效验码是否正确 public static boolean jishuan(String str){ int[] m = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2}; String[] M = {"1","0","X","9","8","7","6","5","4","3","2"}; int sum = 0; for (int i = 0; i < str.length()-1; i++) { sum += Integer.parseInt(String.valueOf(str.charAt(i)))*m[i]; } sum %= 11; // 判断判断效验码是否正确 if (M[sum].contains(String.valueOf(str.charAt(17)))){ return true; }else { return false; } } }
1031 查验身份证Java
最新推荐文章于 2022-08-03 10:10:31 发布