**************程式碼如下**************

import java.util.Scanner;
public class id
{
 public static void main(String[] arg)
 {
  System.out.println("*****身分證驗證開始*****");
  while (true)          //無窮迴圈:假如輸入錯誤,重新輸入身分證字號
  {
   Scanner sc =new Scanner(System.in);
   System.out.print("請輸入身分證字號:");
   String id1=sc.next();
   //不管輸入是大小寫,都轉成大寫
   String id=id1.toUpperCase();
   int c=0,d=0;
   //判斷字元數是否足夠
   if (id.length()!=10)
   {
    System.out.println("你所輸入字數不是10個!!");
    continue;
   }
   //判斷第一個字元是否為大寫英文字
   for (int i=65;i<=90;i++)
   {
    char ch=(char)i;
       if (id.charAt(0)==ch)    //若是第一個字為英文則變數c=1
       c=1;
   }
          if (c==0)                  //當輸入第一個字不是英文
      {
       System.out.println("你所輸入第一個字不是英文!!");
       continue;
      }
      //判斷第二個字元是否正確
      char ch1=49,ch2=50;           //ch1為身分証第二個字為1,ch2為身分証第二個字為2
      if ((id.charAt(1)==ch1)||(id.charAt(1)==ch2))  //輸入的第二個字是1或2則變數d=1
            d=1;
      if (d==0)                     //當輸入第二個字不是1或2時
      {
       System.out.println("你所輸入第二個字錯誤!!");
       continue;
      }
      //判斷格式是否符合身分證驗證
      String str="ABCDEFGHJKLMNPQRSTUVXYWZIO";
      int e=(int)str.indexOf(id.charAt(0))+10;  //令A=10,B=11....依此類推(抓A在str的位置+10,ps第一個位置為0)
      int f=e/10,g=e%10,total=0;                
      g*=9;
      int aa=0;                               
      for (int j=1;j<=8;j++)
      total+=(id.charAt(j)-48)*(9-j);           //-48原因在於id.charAt(抓的是數字的char)
      total+=+f+g;
      total%=10;
      int bb=((id.charAt(9)-48)+total)%10;
      if (bb==0)
      {
       System.out.println("這是正確的身分證號碼!!");
       aa=1;
       break;                                //正確,跳出迴圈
      }
      if (aa==0)                                //aa不等於0則輸入身分證字號不符合
      System.out.println("這不是正確的身分證字號!!");
      continue;  
  }
 }
}
文章標籤
全站熱搜
創作者介紹
創作者 kulo 的頭像
kulo

庫洛的異想世界

kulo 發表在 痞客邦 留言(1) 人氣(2,167)