JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Java 程式分享區  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友    訂閱主題
reply to postflat modego to previous topicgo to next topic
本主題所含的標籤
無標籤
作者 身份證字號製造、確認程式 [Re:worookie]
swanky

暴走熊

版主

發文: 461
積分: 9
於 2004-02-21 16:18 user profilesend a private message to usersend email to swankyreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
之前有寫過製造身分證字號的程式
現在把確認程式整合起來:)

規則:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
第一位為英文字母
第二個數字是男女生之分,男生為 1,女生為 2
 
身份證字號後面八個數字之中,前面七個可以隨便打
最後一位為檢查碼,必須經過之前一個字母與8個數字的組合計算後得出
 
檢查碼的運算原則:
 
英文代號以下表轉換成數字
       A=10  台北市       J=18 新竹縣         S=26  高雄縣
       B=11  台中市       K=19 苗栗縣         T=27  屏東縣
       C=12  基隆市       L=20 台中縣         U=28  花蓮縣
       D=13  台南市       M=21 南投縣         V=29  台東縣
       E=14  高雄市       N=22 彰化縣         W=32  金門縣
       F=15  台北縣       O=35 新竹市         X=30  澎湖縣
       G=16  宜蘭縣       P=23 雲林縣         Y=31  陽明山
       H=17  桃園縣       Q=24 嘉義縣         Z=33  連江縣
       I=34  嘉義市       R=25 台南縣
 
(1)英文轉成的數字, 個位數乘9再加上十位數
(2)各數字從右到左依次乘1、2、3、4....8
 
(1)與(2)的和,除10求出餘數
用10減該餘數,結果就是檢查碼,若餘數為0,檢查碼就是 0。
 
例如: 身分證號碼是 Z12345678?
 
             Z 1 2 3 4 5 6 7 8 
       3 3
         X  X  X  X X  X  X  X  X X
         1  9  8 7 6 5 4  3  2  1 
      ─────────────────────
         3 + 27 + 8 + 14 + 18 + 20 + 20 + 18 +14 + 8 = 150
         150/10=15....0 (餘數)
         10-0=10 (檢查碼為0)
          ∴身份證字號為Z123456780


程式:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
import java.util.Random;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
 
public class IDMaker extends JFrame{
   private String[] location = {
      "台北市", "台中市", "基隆市", "台南市", "高雄市", "台北縣", "宜蘭縣", "桃園縣",
      "嘉義市", "新竹縣", "苗栗縣", "台中縣", "南投縣", "彰化縣", "新竹市", "雲林縣",
      "嘉義縣", "台南縣", "高雄縣", "屏東縣", "花蓮縣", "台東縣", "金門縣", "澎湖縣",
      "陽明山", "連江縣"
   };
   private int[] locationNumber = {
      10, 11, 12, 13, 14, 15, 16, 17,
      34, 18, 19, 20, 21, 22, 35, 23,
      24, 25, 26, 27, 28, 29, 32, 30,
      31, 33
   };
   private char[] locationChar = {
      'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
      'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
      'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
      'Y', 'Z'
   };
   private JComboBox c = new JComboBox(location);
   private JComboBox s = new JComboBox(new String[]{"男", "女"});
   private JButton make = new JButton("製造");
   private JButton checkID = new JButton("確認");
   private JTextField tf = new JTextField(10);
 
   private ActionListener makeAction = new ActionListener(){
      public void actionPerformed(ActionEvent e){
         StringBuffer output = new StringBuffer();
         int[] number = new int[9];
         int locationIndex = c.getSelectedIndex();
         output.append(locationChar[locationIndex]);
         number[0] = (locationNumber[locationIndex] % 10) * 9 +
            (int)(locationNumber[locationIndex] / 10);
 
         output.append(number[1] = s.getSelectedIndex() + 1);
 
         Random r = new Random();
         for(int i = 2; i < number.length; i++){
            output.append(number[i] = r.nextInt(10));
         }
 
         int sum = number[0];
         for(int i = number.length - 1, j = 1; i > 0 ; i--, j++){
            sum += number[i] * j;
         }
         int check = (sum % 10) == 0 ? 0 : 10 - (sum % 10);
         output.append(check);
         tf.setText(output.toString());
      }
   };
 
   private ActionListener checkAction = new ActionListener(){
      public void actionPerformed(ActionEvent e){
         String s = tf.getText().trim();
         if(s.equals("")) return;
 
         if(checkID(s)){
            JOptionPane.showMessageDialog(null, "正確", "身分證字號確認",
               JOptionPane.INFORMATION_MESSAGE);
         }
         else{
            JOptionPane.showMessageDialog(null, "錯誤", "身分證字號確認",
               JOptionPane.ERROR_MESSAGE);
         }
      }
   };
 
   public IDMaker(){
      JPanel p1 = new JPanel();
      p1.add(c);
      p1.add(s);
      getContentPane().add(p1, BorderLayout.NORTH);
 
      JPanel p2 = new JPanel();
      make.addActionListener(makeAction);
      p2.add(make);
      checkID.addActionListener(checkAction);
      p2.add(checkID);
      getContentPane().add(p2, BorderLayout.CENTER);
      getContentPane().add(tf, BorderLayout.SOUTH);
   }
 
   public boolean checkID(String Chk2){
      String v[][] = {{"A", "台北市"}, {"B", "台中市"}, {"C", "基隆市"},
         {"D", "台南市"}, {"E", "高雄市"}, {"F", "台北縣"}, {"G", "宜蘭縣"},
         {"H", "桃園縣"}, {"J", "新竹縣"}, {"K", "苗栗縣"}, {"L", "台中縣"},
         {"M", "南投縣"}, {"N", "彰化縣"}, {"P", "雲林縣"}, {"Q", "嘉義縣"},
         {"R", "台南縣"}, {"S", "高雄縣"}, {"T", "屏東縣"}, {"U", "花蓮縣"},
         {"V", "台東縣"}, {"X", "澎湖縣"}, {"Y", "陽明山"}, {"W", "金門縣"},
         {"Z", "連江縣"}, {"I", "嘉義市"}, {"O", "新竹市"}
      };
 
      int inte = -1;
      String s1 = String.valueOf(Character.toUpperCase(Chk2.charAt(0)));
      for(int i = 0; i < 26; i++){
         if(s1.compareTo(v[i][0]) == 0){
            inte = i;
         }
      }
      int total = 0;
      int all[] = new int[11];
      String E = String.valueOf(inte + 10);
      int E1 = Integer.parseInt(String.valueOf(E.charAt(0)));
      int E2 = Integer.parseInt(String.valueOf(E.charAt(1)));
      all[0] = E1;
      all[1] = E2;
      try{
         for(int j = 2; j <= 10; j++)
            all[j] = Integer.parseInt(String.valueOf(Chk2.charAt(j - 1)));
         for(int k = 1; k <= 9; k++)
            total += all[k] * (10 - k);
         total += all[0] + all[10];
         if(total % 10 == 0)
            return true;
      }
      catch(Exception ee){;
      }
      return false;
   }
 
   public static void main(String[] args){
      IDMaker app = new IDMaker();
      app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      app.pack();
      app.setVisible(true);
   }
}


swanky edited on 2004-09-02 00:12
reply to postreply to post
話題樹型展開
人氣 標題 作者 字數 發文時間
13256 [工具]身分證字號確認程式 worookie 15 2004-02-21 07:18
61427 身份證字號製造、確認程式 swanky 5523 2004-02-21 16:18
18416 Re:身份證字號製造、確認程式 y868 1241 2004-06-02 16:26
7044 Re:身份證字號製造、確認程式 indrawn 191 2006-06-23 14:40
6541 Re:身份證字號製造、確認程式 indrawn 24 2006-06-23 10:39
» JWorld@TW »  Java 程式分享區

reply to postflat modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8