1031 查验身份证 (15 分)
【思路】
import java.util.*; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main{ public static void main(String[] args) throws IOException{ BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); int num = Integer.valueOf(reader.readLine()); String[] strings = new String[num]; for(int i=0; i <num; i++){ strings[i] = reader.readLine(); } //判断是否合法,如果合法存入集合 ArrayList<String> list = new ArrayList<>(); for(int i=0; i<num; i++){ if(!isValid(strings[i])){ list.add(strings[i]);//合法则存入下标 } } //如果集合长度不为零,将不合法的字符串输出 if(list.size() > 0){ for(int i=0; i<list.size() ;i++){ System.out.println(list.get(i)); } }else{ System.out.println("All passed"); } } private static Boolean isValid(String stringItem){ int[] weight = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2}; char[] base = {'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'}; int sum=0;//加权求和 for(int i=0; i<17;i++){ if(stringItem.charAt(i) < '0' || stringItem.charAt(i)>'9'){ return false; } sum = sum + (stringItem.charAt(i) - '0') * weight[i]; } int mod = sum%11;//求余 if(base[mod] != stringItem.charAt(17)){ return false; } return true; } }