4.算法与编程1.判断身份证:要么是15位,要么是18位,最后一位可以为字母,并写程序提出其中的年月日。答:我们可以用正则表达式来定义复杂的字符串格式,(\d{17}[0-9a-zA-Z]|\d{14}[0-9a-zA-Z])可以用来判断是否为合法的15位或18位身份证号码。因为15位和18位的身份证号码都是从7位到第12位为身份证为日期类型。这样我们可以设计出更精确的正则模式,使身份证号的日期合法,这样我们的正则模式可以进一步将日期部分的正则修改为[12][0-9]{3}[01][0-9][123][0-9],当然可以更精确的设置日期。在jdk的java.util.Regex包中有实现正则的类,Pattern和Matcher。以下是实现代码:importjava.util.regex.Matcher;importjava.util.regex.Pattern;publicclassRegexTest{/***@paramargs*/publicstaticvoidmain(String[]args){//测试是否为合法的身份证号码String[]strs={"130681198712092019","13068119871209201x","13068119871209201","123456789012345","12345678901234x","1234567890123"};Patternp1=Pattern.compile("(\\d{17}[0-9a-zA-Z]|\\d{14}[0-9a-zA-Z])");for(inti=0;i