`

java判断身份证信息小程序(无图形界面)

阅读更多
请输入要查询的身份证号码,输入exit退出:
53010219200508011x
身份证号:53010219200508011x
所属地区:云南省
出生日期:1920年5月8日
性别:男性
校验位:正确。
------------------------------------------
请输入要查询的身份证号码,输入exit退出:
530102192005080111
身份证号:530102192005080111
所属地区:云南省
出生日期:1920年5月8日
性别:男性
校验位:错误,校验为应该是:x
------------------------------------------
请输入要查询的身份证号码,输入exit退出:

package identity_card;

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

/**
 * 验证身份证
 */
public class Go {

	/** 保存全国各地区身份证省份代码 */
	private Map<Integer, String> city = new HashMap<Integer, String>();

	/** 主函数,不多说 */
	public static void main(String[] args) {
		new Go().init();
	}

	/** 初始化相关参数及数据 */
	public void init() {
		insert();
		input();
	}

	/** 接收输入,判定结果 */
	public void input() {
		Scanner sc = new Scanner(System.in);
		while (true) {
			System.out.println("请输入要查询的身份证号码,输入exit退出:");
			String str = sc.nextLine();// 接收一行输入
			if (str.toString().equals("exit")) {// 判断是否输入的是"exit",如果不是,继续执行,否则退出
				System.out.println("系统已经退出。");
				System.exit(0);// 退出
			}
			if (str.length() == 18) {// 身份证必须等于18位才可以判断,否则不判断,这里面判断等于18位的
				boolean status = true;// 设初始状态为可行的
				for (int i = 0; i < str.length() - 1; i++) {// 这里面只判断前17位是否是数字,因为最后一位可以是"x"或"X"
					if (!Character.isDigit(str.charAt(i))) {// 如果当前字节不是数字,打印提示,改变status的值
						System.out.println("你输入的内容不符合要求。");
						status = false;
					}
				}
				/*
				 * 上面的循环走完了,如果没有出错,status还是等于true,所以这里我们再判断最后一位
				 * 如果上面出错了,status不等于true,那么下面的if就不执行了
				 */
				if (status) {// 这个地方也可以写成if (status==true){
					/*
					 * 前17位判断完成后,接下来,我们判定最后一位,最后一位只能是"x"或"X"
					 */
					if (Character.isDigit(str.charAt(17))
							|| str.charAt(17) == 'x' || str.charAt(17) == 'X') {// 如果满足继续执行,否则执行else
						/** 能跑到这里面,说明前面的判断都没有问题,现在开始拆分内容了 */
						{// 这一组括号其实是没有用的,在这是为了区分模块,这个模块是显示输入的内容的
							System.out.print("身份证号:");
							System.out.println(str);
						}
						{// 这个模块是用来显示地区的
							String home = city.get(new Integer(str.substring(0,
									2)));// 查询所属城市,如果查不到为null
							System.out.print("所属地区:");
							if (home != null)
								System.out.println(home);
							else
								System.out.println("不存在");
						}
						{// 这个模块是用来显示出生日期的
							int year = Integer.valueOf(str.substring(6, 10));
							int month = Integer.valueOf(str.substring(10, 12));
							int day = Integer.valueOf(str.substring(12, 14));
							System.out.print("出生日期:");
							if (year > 0) {// 年份必须是大于0的
								if (month > 0 && month <= 12) {// 月必须大于0,月小于13,日还要单独算
									if (day > 0) {// 这里只判定大于0,小于多少,单独判定,因为年份月份不同,天数不同
										int days = getDays(year, month);// 判断当前年份下,当前月下有多少天,区分平闰年
										if (day <= days) {
											System.out.print(year + "年");
											System.out.print(month + "月");
											System.out.println(day + "日");
										} else {
											System.out.println("不存在,具体几日有问题。");
										}
									} else {
										System.out.println("不存在,具体几日有问题。");
									}
								} else {
									System.out.println("不存在,具体几月有问题。");
								}
							} else {
								System.out.println("不存在,具体哪一年有问题。");
							}
						}
						{// 这个模块是用来显示性别的
							System.out.print("性别:");
							System.out.println((Integer.valueOf(str.substring(
									16, 17))) % 2 == 1 ? "男性" : "女性");
						}
						{// 这个模块是用来显示校验码是否正确的
							int last = getCheck(str);// 存放最后一位计算出来的值,用于和输入的值进行比较
							System.out.print("校验位:");
							if ((str.substring(17, 18) + "").equals(String
									.valueOf(last))
									|| (str.substring(17).equals("x") && last == -1)
									|| (str.substring(17).equals("X") && last == -1)) {// 比较最后一位是否和计算的值一致
								System.out.println("正确。");
							} else {
								System.out.println("错误,校验为应该是:"
										+ ((last != -1) ? last : "x"));
							}
						}
					} else {
						System.out.println("你输入的内容不符合要求。");
					}
				}
			} else {// 这里面判断不等于18位的
				System.out.println("你输入的内容不符合要求。");
			}
			System.out.println("------------------------------------------");
		}
	}

	/** 判断当前年份下,当前月下有多少天,区分平闰年 */
	public int getDays(int year, int month) {// 判断当前年份下,当前月下有多少天,区分平闰年
		if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8
				|| month == 10 || month == 12) {// 这些月下,不管是平年,还是闰年,都是31天
			return 31;
		} else if (month == 4 || month == 6 || month == 9 || month == 11) {// 这些月下,不管是平年,还是闰年,都是30天
			return 30;
		} else {
			if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {// 这是闰年
				return 29;
			} else { // 这是平年
				return 28;
			}
		}
	}

	/** 获取身份证校验码,参数是身份证字符串,返回值-1代表的是"x"或"X" */
	public int getCheck(String str) {
		/** 这个变量用来存放所有校验和 */
		int sum = 0;
		/** 这个数组里面存放的是身份证校验位系数,coefficient的缩写 */
		int[] coe = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };
		/** 这个数组里面存放的是身份证校验对应的最后一位身份证号码 */
		int[] check = { 1, 0, -1, 9, 8, 7, 6, 5, 4, 3, 2 };// -1代表的是"x"或"X"
		for (int i = 0; i < str.length() - 1; i++) {
			sum = sum + Integer.parseInt(str.charAt(i) + "") * coe[i];
		}
		return check[sum % 11];
	}

	/** 将全国各地区身份证省份代码插入到private Map<Integer, String> city集合中 */
	public void insert() {
		city.put(11, "北京市");
		city.put(12, "天津市");
		city.put(13, "河北省");
		city.put(14, "山西省");
		city.put(15, "内蒙古自治区");
		city.put(21, "辽宁省");
		city.put(22, "吉林省");
		city.put(23, "黑龙江省");
		city.put(31, "上海市");
		city.put(32, "江苏省");
		city.put(33, "浙江省");
		city.put(34, "安徽省");
		city.put(35, "福建省");
		city.put(36, "江西省");
		city.put(37, "山东省");
		city.put(41, "河南省");
		city.put(42, "湖北省");
		city.put(43, "湖南省");
		city.put(44, "广东省");
		city.put(45, "广西壮族自治区");
		city.put(46, "海南省");
		city.put(5, "0重庆市");
		city.put(51, "四川省");
		city.put(52, "贵州省");
		city.put(53, "云南省");
		city.put(54, "西藏自治区");
		city.put(61, "陕西省");
		city.put(62, "甘肃省");
		city.put(63, "青海省");
		city.put(64, "宁夏回族自治区");
		city.put(65, "新疆维吾尔自治区");
		city.put(71, "台湾省(886)");
		city.put(81, "香港特别行政区");
		city.put(82, "澳门特别行政区");
	}
}
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    java判断身份证信息小程序(有图形界面)

    【标题】"Java判断身份证信息小程序(有图形界面)"是一个基于Java编程语言开发的应用程序,其主要功能是验证中国居民的身份证号码是否有效。这个小程序不仅包含核心的身份证信息判断逻辑,还集成了图形用户界面(GUI...

    基于java开发的排队取号小程序

    3. **GUI图形界面**:为了方便用户操作,小程序通常会包含图形用户界面(GUI)。Java的Swing或JavaFX库可以用来构建这些界面,包括显示当前号码、剩余人数、等待时间等信息的组件,以及取号、叫号等功能按钮。 4. *...

    Java网吧计费小程序

    【Java网吧计费小程序】 Java网吧计费小程序是一款基于Java编程语言开发的简易计费管理系统,主要用于网吧环境下的用户上网计费管理。该程序旨在提高网吧运营效率,规范计费流程,确保营业收入的准确无误。下面将...

    java GUI 考生信息管理系统

    它通过直观的图形界面,允许用户录入、查询、修改和删除考生的相关信息,如姓名、身份证号、考试科目、成绩等。这个系统通常包括多个功能模块,如考生信息录入模块、信息查询模块、成绩管理模块以及系统设置模块等。...

    java+access学生信息管理系统

    1. 前端:Java利用Swing或JavaFX库创建图形用户界面(GUI),提供友好的操作界面,包括学生信息的录入、查询、修改和删除等功能。 2. 后端:Access数据库用于存储学生信息,如姓名、学号、班级、成绩等,同时,...

    机票预订系统界面代码(java)

    为了实现这些功能,开发者可能使用了Java Swing或JavaFX库来构建图形用户界面,它们是Java标准库的一部分,专门用于创建桌面应用程序的界面。Swing是基于AWT(Abstract Window Toolkit)的,提供了丰富的组件和布局...

    毕业论文java 小程序 基于微信小程序的新生自助报到系统.docx

    该系统是基于微信小程序的新生自助报到系统,利用 Java 技术和 MySQL 数据库实现。该系统的主要功能是实现新生报到的信息化,提高新生报到管理的发展和经验。 知识点一:新生报到系统的需求分析 新生报到系统的...

    基于纯java的飞机订票系统

    【标签】"java 界面编程"意味着系统采用了Java的图形用户界面(GUI)库,如Swing或JavaFX,来创建用户界面。这些库提供了丰富的组件,如按钮、文本框、表格等,可以方便地构建出交互式的窗口应用程序。 总的来说,...

    QT+opencv+OCR 身份证号码,银行卡号识别

    在这个特定的项目中,我们看到一个利用QT图形界面库,OpenCV图像处理库,以及OCR(Optical Character Recognition,光学字符识别)技术来实现身份证号码和银行卡号的自动提取的示例。 首先,让我们详细了解一下QT。...

    Java图书馆管理系统源程序

    6. 界面设计:采用Swing或JavaFX等库创建用户友好的图形界面,提供直观的操作体验。 在开发过程中,良好的代码结构和设计原则是必不可少的,例如SOLID原则(单一职责、开闭、里氏替换、接口隔离和依赖倒置)。此外...

    JAVA 特殊效果案例

    这些案例不仅展示了JAVA在图形用户界面(GUI)开发中的潜力,还体现了其在处理数据和时间操作上的灵活性。 1. 彩蛋(Easter Eggs): 彩蛋是一种程序员隐藏在软件中的小惊喜,通常是为了增加趣味性或作为个人签名...

    java jdk实列宝典 光盘源代码

    15 applet java可以编写两类程序,applications和applet,applications可以在控制台直接运行,与其他高级编程语言没有太大区别,而java的特色在于它具有编制小应用程序的功能,applet可以在internet上传输并在兼容...

    医院手术安排管理程序(数据结构java)

    但在本程序中,可能选择自定义数据结构以满足特定需求,比如存储额外的病人信息(身份证号、姓名、性别等)。 - Java的面向对象特性使得设计和实现这样的管理系统更为直观,通过类来封装病人信息和手术状态,使用...

    小型图书管理系统

    3. **视图层**:用户界面,可能使用Java Swing或JavaFX来构建图形用户界面,提供直观的操作方式,如表格展示图书信息、输入框输入查询条件等。 4. **持久层**:Java与Access数据库的交互通常通过JDBC(Java ...

    基于Java的小型人事管理系统,带数据库.zip

    - 前端界面可能采用JavaFX或Swing来构建,它们是Java中的图形用户界面(GUI)工具包,用于创建桌面应用程序。 - 也可能使用Web技术,如HTML、CSS和JavaScript,配合Java的Servlet或Spring MVC来构建一个基于Web的...

    Java Swing 机票管理系统

    Java Swing 是Java GUI(图形用户界面)开发的一个关键库,它是Java AWT(Abstract Window Toolkit)的扩展,提供了更为丰富的组件和更灵活的设计能力。在Java Swing中,开发者可以创建出美观、功能丰富的桌面应用...

    Java 项目-阳光酒店管理系统(javaapplet+SQL).zip

    1. **JavaApplet**:JavaApplet是Java的一种早期应用形式,它允许开发者编写可以在Web浏览器中运行的小程序。在阳光酒店管理系统中,JavaApplet被用来构建用户交互的前端部分,如客房预订、入住登记、退房处理等界面...

Global site tag (gtag.js) - Google Analytics