查验身份证(15)
【思路】每输入一行字符串就开始对前17位进行校验。前17里的X不用管,因为有X的话算出来的是没有对应校验位的。
import java.util.*; public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); int n = sc.nextInt(); boolean isAllPassed = true; for(int i=0; i<n; i++){ String number = sc.next(); if(!check(number.substring(0,17), number.charAt(17))){ isAllPassed = false; System.out.println(number); } } if(isAllPassed){ System.out.println("All passed"); } } //判断加权求和除11的余是否与最后一位相同 public static boolean check(String sub , char m){ int[] value = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 }; int sum = 0; //加权求和 //前17里的X不用管,因为有X的话算出来的是没有对应校验位的 for(int i=0; i<sub.length(); i++){ sum = sum + value[i] * (sub.charAt(i) - '0'); } char[] z = { '1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2' }; if(m == z[sum%11]){ //身份证号最后一位与加权求和除11的余相同 return true; } return false; } }