L1-016 查验身份证 - java

题目解析

给定一些身份证号判断其是否合法

如果这些身份证号都合法 那么就输出 “All passed” 否则 那些不合法就输出不合法的身份证号

解题思路

直接计算每位的权重和 看 是否与合法即可

代码

import java.io.*;
import java.util.*;

public class Main
{

	static int z[] =
	{ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };
	static char m[] =
	{ '1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2' };

	public static void main(String[] args)
	{
		int n = sc.nextInt();

		boolean isall = true;
		while (n-- > 0)
		{
			String str = sc.next();
			char s[] = str.toCharArray();

			int sum = 0;
			for (int i = 0; i < 17; i++)
				sum = (sum + (s[i] - '0') * z[i]) % 11;

			if (m[sum % 11] != s[17])
			{
				isall = false;
				out.println(str);
			}
		}
		if (isall)
			out.println("All passed");

		out.flush();
		out.close();
	}

	static Scanner sc = new Scanner(System.in);
	static PrintWriter out = new PrintWriter(System.out);
}

团体程序设计天梯赛-练习集-java

赞赏