java正则实现身份证号码匹配

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;
	}
}

额,顺便也存一份正则图在这吧


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值