利用正则表达式判断身份证号

算法与编程 专栏收录该内容
12 篇文章 0 订阅
package com.alex.RegExp;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class IDnumDistinguish {

	//判断身份证:要么是15位,要么是18位,最后一位可以为字母,并写程序提出其中的年月日。
	public static void main(String[] args) {
		while(true){
			//提示用户输入身份证号
			System.out.println("请输入身份证号码:");
			//通过流处理获得用户身份证号
			BufferedReader consoleReader = new BufferedReader(new InputStreamReader(System.in));
			String idNum=null;
			try {
				idNum= consoleReader.readLine();
			} catch (IOException e) {
				e.printStackTrace();
			}
			//定义判别用户身份证号的正则表达式(要么是15位,要么是18位,最后一位可以为字母)
			Pattern idNumPattern = Pattern.compile("(\\d{14}[0-9a-zA-Z])|(\\d{17}[0-9a-zA-Z])");
			//通过Pattern获得Matcher
			Matcher idNumMatcher = idNumPattern.matcher(idNum);
			//判断用户输入是否为身份证号
			if(idNumMatcher.matches()){
				System.out.println("您的出生年月日是:");
				//如果是,定义正则表达式提取出身份证中的出生日期
				Pattern birthDatePattern= Pattern.compile("\\d{6}(\\d{4})(\\d{2})(\\d{2}).*");//身份证上的前6位以及出生年月日
				//通过Pattern获得Matcher
				Matcher birthDateMather= birthDatePattern.matcher(idNum);
				//通过Matcher获得用户的出生年月日
				if(birthDateMather.find()){
					String year = birthDateMather.group(1);
					String month = birthDateMather.group(2);
					String date = birthDateMather.group(3);
					//输出用户的出生年月日
					System.out.println(year+"年"+month+"月"+date+"日");				
				}	
			}else{
				//如果不是,输出信息提示用户
				System.out.println("您输入的并不是身份证号");
			}
		}
	}

}

  • 3
    点赞
  • 3
    评论
  • 3
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值