这个看着舒服多了:https://www.jianshu.com/p/ead5b08e9839
/**
* 18位二代身份证号码的正则表达式
*/
public static final String REGEX_ID_NO_18 = "^"
+ "\\d{6}" // 6位地区码
+ "(18|19|([23]\\d))\\d{2}" // 年YYYY
+ "((0[1-9])|(10|11|12))" // 月MM
+ "(([0-2][1-9])|10|20|30|31)" // 日DD
+ "\\d{3}" // 3位顺序码
+ "[0-9Xx]" // 校验码
+ "$";