java的正则匹配,使用java.util.regex中的 Pattern实现,顺便用小程序实现的,上代码
package homework;
import java.applet.*;
import java.util.regex.*;
import java.awt.*;
public class IDcard extends Applet{
Label lab;
TextField input;
Button butt;
public void init() {
lab=new Label("请输入18位身份证号");
input=new TextField(20);
butt=new Button("clear");
add(lab);
add(input);
add(butt);
}
public boolean action(Event e,Object o) {
if(e.target==input) {
boolean flag=false;
//正则匹配身份证格式,缺陷是未检验日期的正确性
Pattern p=Pattern.compile("(^[1-8][0-7]{2}\\d{3}([12]\\d{3})(0[1-9]|1[012])(0[1-9]|[12]\\d|3[01])\\d{3}([0-9Xx])$)");
String num=input.getText();
Matcher m=p.matcher(num);
//匹配最后一位检验码是否正确
int index[]= {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
//检验码对应规则,第三位实际上应该是x,这个地方用100但是实际上检验时不会用到
int check[]= {1,0,100,9,8,7,6,5,4,3,2};
if(m.matches()) {
int sum=0;
for(int i=0;i<17;i++) sum+=index[i]*(num.charAt(i)-'0');
sum%=11;
if(sum==2 && ( num.charAt(17)=='x'||num.charAt(17)=='X' ) ) flag=true;
else if(check[sum]==(num.charAt(17)-'0')) flag=true;
}
if(flag) showStatus("输入正确,此号码是身份证号");
else showStatus("输入有误,此号码不是身份证号");
}
else if (e.target==butt) input.setText("");
return true;
}
}
额,顺便也存一份正则图在这吧