2016年11月28日 星期一

驗證是否符合身分證字號命名原則

package lab1128.id; /* * 字串"A123456789",驗證是否符合身分證字號命名原則 */ public class IdChecker { public static void main(String[] args) { IdChecker idcheck=new IdChecker(); //建立物件並呼叫預設建構子 boolean result=idcheck.check("A123456789"); System.out.println("result="+result); }

private int convert(char c){ c=Character.toUpperCase(c);//不論是大寫或小寫,通通轉成大寫 if(c=='A'){ return 10; } else if(c=='B'){ return 11; } else if(c=='C'){ return 12; } else if(c=='D'){ return 13;
}
else if(c=='E'){ return 14; } else if(c=='F'){ return 15; } else if(c=='G'){
return 16;
}

else if(c=='H'){
return 17;
}
else if(c=='I'){
return 34;
}
else if(c=='J'){
return 18;
}
else if(c=='K'){
return 19;
}
else if(c=='L'){
return 20;
}
else if(c=='M'){
return 21;
}
else if(c=='N'){
return 22;
}
else if(c=='O'){
return 35;
}
else if(c=='P'){
return 23;
}
else if(c=='Q'){
return 24;
}
else if(c=='R'){
return 25;
}
else if(c=='S'){
return 26;
}
else if(c=='T'){
return 27;
}
else if(c=='U'){
return 28;
}
else if(c=='V'){
return 29;
}
else if(c=='W'){
return 32;
}
else if(c=='X'){
return 30;
}
else if(c=='Y'){
return 31;
}
else if(c=='Z'){
return 33;
}
return 0;
}
private boolean isLegalFormat(String s){ //檢查身分證字號格式
if(s==null){ //如果字串是空值
return false;
}
if(s.length()!=10){ //長度沒有等於10
return false;
}
for(int i=1;i<10;i++){
char ch=s.charAt(i); //取字串1~9
if(!Character.isDigit(ch)){ //檢查是否為數字0~9
return false;
}
}
return true;
}




public boolean check(String id){
//傳遞身分證字號到isLegalFormat函數檢查是否符合命名原則(英文+數字)

if(!this.isLegalFormat(id)){
//if要true才能執行,所以當回傳this.isLegalFormat(id)=false
//前面要加上!使if條件能執行
return false;
}
char ch=id.charAt(0); //取得字串id的第0個字元
int D0=this.convert(ch); //呼叫convert函數並傳字元ch
int x1=(D0/10); //取得十位數
int x2=(D0); //取得個位數

int Data[]=new int[9];
//for(int i=0;i<Data.length;i++){
//Data[i]=Character.getNumericValue(id.charAt(i+1)); //轉換字元為整數
//}

for(int i=0;i<Data.length;i++){
Data[i]=Integer.parseInt(id.substring(i+1,i+2)); //轉換字串為整數
//Data[0]=id字串的第2個數字,id=A123456789 1=Data[0] 2=Data[1] 3=Data[2] 4=Data[3]
}
int Y2 = x1+ 9*x2+ 8*Data[0]+ 7*Data[1]+ 6*Data[2]+ 5*Data[3]+4*Data[4]+ 3*Data[5]+ 2*Data[6]+ Data[7];
//公式:Y = X1+ 9*X2+ 8*D1+ 7*D2+ 6*D3+ 5*D4+4*D5+ 3*D6+ 2*D7+ D8
int CheckCode = (10-(Y2 % 10)) % 10;
System.out.println("CheckCode="+CheckCode);
if(CheckCode==Data[8]){
return true;
}
return false;
}
}

沒有留言:

張貼留言