查验身份证(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;
    }
}


全部评论

相关推荐

程序员牛肉:主要是因为小厂的资金本来就很吃紧,所以更喜欢有实习经历的同学。来了就能上手。 而大厂因为钱多,实习生一天三四百的就不算事。所以愿意培养你,在面试的时候也就不在乎你有没有实习(除非是同级别大厂的实习。) 按照你的简历来看,同质化太严重了。项目也很烂大街。 要么换项目,要么考研。 你现在选择工作的话,前景不是很好了。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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