1. 程式人生 > >利用Java裡的正則表示式求一群人身份證上的出生年月日

利用Java裡的正則表示式求一群人身份證上的出生年月日

package Regex;

import java.util.regex.*;

import java.util.regex.Matcher;

public class testIdCard {
	public static void main(String[] args) {
        testID_Card();
    }

    public static void testID_Card() {
        // 測試是否為合法的身份證號碼
        String[] strs = { "130681198712092019", "13068119871209201x",
                "13068119871209201", "123456789012345", "12345678901234x",
                "1234567890123" };
        // 準備正則表示式(身份證有15位和18位兩種,身份證的最後一位可能是字母)
        String regex = "(\\d{14}\\w)|\\d{17}\\w";
        // 準備開始匹配,判斷所有的輸入是否是正確的
        Pattern regular = Pattern.compile(regex); // 建立匹配的規則Patter

        StringBuilder sb = new StringBuilder();
        // 遍歷所有要匹配的字串
        for (int i = 0; i < strs.length; i++) {

        	Matcher matcher = regular.matcher(strs[i]);// 建立一個Matcher
            sb.append("身份證:  ");
            sb.append(strs[i]);
            sb.append("   匹配:");
            sb.append(matcher.matches());
            System.out.println(sb.toString());//轉化成字元型輸出
            sb.delete(0, sb.length());// 清空StringBuilder的方法
        }

        GetBirthDay(strs);

    }

    private static void GetBirthDay(String[] strs) {
        System.out.println("準備開始獲取出生日期");
        // 準備驗證規則
        Pattern BirthDayRegular = Pattern.compile("(\\d{6})(\\d{8})(.*)");
        // .*連在一起就意味著任意數量的不包含換行的字元
        Pattern YearMonthDayRegular = Pattern.compile("(\\d{4})(\\d{2})(\\d{2})");
        for (int i = 0; i < strs.length; i++) {
            Matcher matcher = BirthDayRegular.matcher(strs[i]);

            if (matcher.matches()) {
            	//matcher.group(2)匹配BirthDayRegular裡的第二個表示式\d{8}的8個字元即出生年月加日期
            	Matcher matcher2 = YearMonthDayRegular.matcher(matcher.group(2));
            	//若不為空,依次輸出年月日
                if (matcher2.matches()) {
                    System.out.println(strs[i]+"    中的出生年月分解為: "+"年" + matcher2.group(1) + "   月:"
                            + matcher2.group(2) + "  日:" + matcher2.group(3));

                }
            }
        }

    }
}