Android编程实现的身份证、车牌号正则验证工具类实例
本文实例讲述了Android编程实现的身份证、车牌号正则验证工具类。分享给大家供大家参考,具体如下:
/**
*正则表达式验证工具类(验证身份证、车牌号等)
*
*@authorchenlin
*
*/
publicclassValidateUtil{
/**
*验证str是否为正确的身份证格式
*
*@paramstr
*@return
*/
publicstaticbooleanisIdentityCard(EditTextview){
booleanflag=true;
Stringlicenc=view.getText().toString();
SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-dd");
/*
*{11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",
*21:"辽宁",22:"吉林",23:"黑龙江",31:"上海",32:"江苏",
*33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山东",41:"河南",
*42:"湖北",43:"湖南",44:"广东",45:"广西",46:"海南",50:"重庆",
*51:"四川",52:"贵州",53:"云南",54:"西藏",61:"陕西",62:"甘肃",
*63:"青海",64:"宁夏",65:"新疆",71:"台湾",81:"香港",82:"澳门",91:"国外"}
*/
Stringprovinces="11,12,13,14,15,21,22,23,31,32,33,34,35,36,37,41,42,43,44,45,46,50,51,52,53,54,61,62,63,64,65,71,81,82,91";
Patternpattern=Pattern.compile("^[1-9]\\d{14}");
Matchermatcher=pattern.matcher(licenc);
Patternpattern2=Pattern.compile("^[1-9]\\d{16}[\\d,x,X]$");
Matchermatcher2=pattern2.matcher(licenc);
//粗略判断
if(!matcher.find()&&!matcher2.find()){
view.setError("身份证号必须为15或18位数字(最后一位可以为X)");
flag=false;
}else{
//判断出生地
if(provinces.indexOf(licenc.substring(0,2))==-1){
view.setError("身份证号前两位不正确!");
flag=false;
}
//判断出生日期
if(licenc.length()==15){
Stringbirth="19"+licenc.substring(6,8)+"-"
+licenc.substring(8,10)+"-"
+licenc.substring(10,12);
try{
Datebirthday=sdf.parse(birth);
if(!sdf.format(birthday).equals(birth)){
view.setError("出生日期非法!");
flag=false;
}
if(birthday.after(newDate())){
view.setError("出生日期不能在今天之后!");
flag=false;
}
}catch(ParseExceptione){
view.setError("出生日期非法!");
flag=false;
}
}elseif(licenc.length()==18){
Stringbirth=licenc.substring(6,10)+"-"
+licenc.substring(10,12)+"-"
+licenc.substring(12,14);
try{
Datebirthday=sdf.parse(birth);
if(!sdf.format(birthday).equals(birth)){
view.setError("出生日期非法!");
flag=false;
}
if(birthday.after(newDate())){
view.setError("出生日期不能在今天之后!");
flag=false;
}
}catch(ParseExceptione){
view.setError("出生日期非法!");
flag=false;
}
}else{
view.setError("身份证号位数不正确,请确认!");
flag=false;
}
}
if(!flag){
view.requestFocus();
}
returnflag;
}
/**
*不为空时,验证str是否为正确的身份证格式
*
*@paramstr
*@return
*/
publicstaticbooleanmaybeIsIdentityCard(EditTextview){
booleanflag=true;
Stringlicenc=view.getText().toString();
if(!licenc.equals("")){
SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-dd");
/*
*{11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",
*21:"辽宁",22:"吉林",23:"黑龙江",31:"上海",32:"江苏",
*33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山东",41:"河南",
*42:"湖北",43:"湖南",44:"广东",45:"广西",46:"海南",50:"重庆",
*51:"四川",52:"贵州",53:"云南",54:"西藏",61:"陕西",62:"甘肃",
*63:"青海",64:"宁夏",65:"新疆",71:"台湾",81:"香港",82:"澳门",91:"国外"}
*/
Stringprovinces="11,12,13,14,15,21,22,23,31,32,33,34,35,36,37,41,42,43,44,45,46,50,51,52,53,54,61,62,63,64,65,71,81,82,91";
Patternpattern=Pattern.compile("^[1-9]\\d{14}");
Matchermatcher=pattern.matcher(licenc);
Patternpattern2=Pattern.compile("^[1-9]\\d{16}[\\d,x,X]$");
Matchermatcher2=pattern2.matcher(licenc);
//粗略判断
if(!matcher.find()&&!matcher2.find()){
view.setError("身份证号必须为15或18位数字(最后一位可以为X)");
flag=false;
}else{
//判断出生地
if(provinces.indexOf(licenc.substring(0,2))==-1){
view.setError("身份证号前两位不正确!");
flag=false;
}
//判断出生日期
if(licenc.length()==15){
Stringbirth="19"+licenc.substring(6,8)+"-"
+licenc.substring(8,10)+"-"
+licenc.substring(10,12);
try{
Datebirthday=sdf.parse(birth);
if(!sdf.format(birthday).equals(birth)){
view.setError("出生日期非法!");
flag=false;
}
if(birthday.after(newDate())){
view.setError("出生日期不能在今天之后!");
flag=false;
}
}catch(ParseExceptione){
view.setError("出生日期非法!");
flag=false;
}
}elseif(licenc.length()==18){
Stringbirth=licenc.substring(6,10)+"-"
+licenc.substring(10,12)+"-"
+licenc.substring(12,14);
try{
Datebirthday=sdf.parse(birth);
if(!sdf.format(birthday).equals(birth)){
view.setError("出生日期非法!");
flag=false;
}
if(birthday.after(newDate())){
view.setError("出生日期不能在今天之后!");
flag=false;
}
}catch(ParseExceptione){
view.setError("出生日期非法!");
flag=false;
}
}else{
view.setError("身份证号位数不正确,请确认!");
flag=false;
}
}
if(!flag){
view.requestFocus();
}
}
returnflag;
}
/**
*验证str是否为正确的身份证格式
*
*@paramstr
*@return
*/
publicstaticbooleanisIdentityCard(Stringlicenc){
booleanflag=true;
SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-dd");
/*
*{11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",
*21:"辽宁",22:"吉林",23:"黑龙江",31:"上海",32:"江苏",
*33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山东",41:"河南",
*42:"湖北",43:"湖南",44:"广东",45:"广西",46:"海南",50:"重庆",
*51:"四川",52:"贵州",53:"云南",54:"西藏",61:"陕西",62:"甘肃",
*63:"青海",64:"宁夏",65:"新疆",71:"台湾",81:"香港",82:"澳门",91:"国外"}
*/
Stringprovinces="11,12,13,14,15,21,22,23,31,32,33,34,35,36,37,41,42,43,44,45,46,50,51,52,53,54,61,62,63,64,65,71,81,82,91";
Patternpattern=Pattern.compile("^[1-9]\\d{14}");
Matchermatcher=pattern.matcher(licenc);
Patternpattern2=Pattern.compile("^[1-9]\\d{16}[\\d,x,X]$");
Matchermatcher2=pattern2.matcher(licenc);
//粗略判断
if(!matcher.find()&&!matcher2.find()){
flag=false;
}else{
//判断出生地
if(provinces.indexOf(licenc.substring(0,2))==-1){
flag=false;
}
//判断出生日期
if(licenc.length()==15){
Stringbirth="19"+licenc.substring(6,8)+"-"
+licenc.substring(8,10)+"-"
+licenc.substring(10,12);
try{
Datebirthday=sdf.parse(birth);
if(!sdf.format(birthday).equals(birth)){
flag=false;
}
if(birthday.after(newDate())){
flag=false;
}
}catch(ParseExceptione){
flag=false;
}
}elseif(licenc.length()==18){
Stringbirth=licenc.substring(6,10)+"-"
+licenc.substring(10,12)+"-"
+licenc.substring(12,14);
try{
Datebirthday=sdf.parse(birth);
if(!sdf.format(birthday).equals(birth)){
flag=false;
}
if(birthday.after(newDate())){
flag=false;
}
}catch(ParseExceptione){
flag=false;
}
}else{
flag=false;
}
}
returnflag;
}
/**
*验证str是否为正确的车牌号
*
*@paramstr
*@return
*/
publicstaticbooleanisPlateNo(EditTextview){
Stringno=view.getText().toString().trim();
if(no==null||no.equals("")){
returnfalse;
}
Stringstr="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
String[]str1={"京","津","冀","晋","蒙","辽","吉","黑","沪","苏",
"浙","皖","闽","赣","鲁","豫","鄂","湘","粤","桂","琼","渝",
"川","贵","云","藏","陕","甘","青","宁","新","农","台","中",
"武","WJ","亥","戌","酉","申","未","午","巳","辰","卯","寅",
"丑","子","葵","壬","辛","庚","己","戊","丁","丙","乙","甲",
"河北","山西","北京","北","南","兰","沈","济","成","广","海","空",
"军","京V","使"};
if(no.equals("新车")){
returntrue;
}
if(no.length()==7){
inth=0;
for(intr=0;r1){
Stringjq1=no.substring(0,1);
Stringjq2=no.substring(0,2);
for(intk=0;k
PS:这里再为大家提供2款非常方便的正则表达式工具供大家参考使用:
JavaScript正则表达式在线测试工具:
http://tools.jb51.net/regex/javascript
正则表达式在线生成工具:
http://tools.jb51.net/regex/create_reg
更多关于Android相关内容感兴趣的读者可查看本站专题:《Android控件用法总结》、《Android开发入门与进阶教程》、《Android视图View技巧总结》、《Android编程之activity操作技巧总结》、《Android数据库操作技巧总结》及《Android资源操作技巧汇总》
希望本文所述对大家Android程序设计有所帮助。