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;
        }
} 


全部评论

相关推荐

04-09 09:47
门头沟学院 Java
Arbelite_:2-3k,这工资还不如去摇奶茶
点赞 评论 收藏
分享
哥_留个offer先:跟他说,你这个最好用c#,微软就用c#Java不适合这个项目
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务