close
首先我們必須了解台灣身分證的相關格式,舉個例子如A123456789,從這個例子中我們不難發現,身分證一共有10碼,分別是一個代表你的戶籍地址的英文以及9碼數字。然而這9碼數字其中開頭與結尾是有規則性的,讓我們一步步的了解所有的規則吧 !

首先是開頭的英文字母,一共有A~Z共26個英文大寫字母,他們分別代表的意思如下:

A (10)

台北市

G (16)

宜蘭縣

M (21)

南投縣

S (26)

高雄縣

Y (31)

陽明山

B (11)

台中市

H (17)

桃園縣

N (22)

彰化縣

T (27)

屏東縣

Z (33)

連江縣

C (12)

基隆市

I (34)

嘉義市

O (35)

新竹市

U (28)

花蓮縣

 

 

D (13)

台南市

J (18)

新竹縣

P (23)

雲林縣

V (29)

台東縣

 

 

E  (14)

高雄市

K (19)

苗栗縣

Q (24)

嘉義縣

W (32)

金門縣

 

 

F  (15)

台北縣

L (20)

台中縣

R (25)

台南縣

X (30)

澎湖縣

 

 

For example , A (10) 是台北市,(10) 數字代表的是 A 這個英文字轉換成的數字。

以身分證字號整體規劃如下:
Yx8x7x6x5x4x3x2x1Z
A123456789
英文性別編號1編號2編號3編號4編號5編號6編號7檢查碼

我們剛剛已經介紹過英文了,現在來介紹第一碼數字,第一碼數字只有 1 與 2 ,1代表的是男生,2則是女生。至於編號1~7則是戶政事務所給予的配號,當我們在設計程式時編號1~7可以是亂數,不過最後要套入公式計算最後一碼的檢查碼,現在我們來看身分證如何計算:

Y = 個位數字 * 9 + 十位數字/10 
Z = 
10-(Y + x8 * 8 + x7 * 7 + x6 * 6 + x5 * 5 + x4 * 4 + x3 * 3 + x2 * 2 + x1 * 1)%10 

例如:A123456789這個範例 ,
A (10) => 10 / 10  + 0 * 9  = 1
10 - ( 1 + 8 + 14 + 18 +20 + 20 + 18 + 14 + 8) / 10 取餘數(相當於C++中的%) = Z

 ( 1 + 8 + 14 + 18 +20 + 20 + 18 + 14 + 8) = 121
除以10餘1,因此10-1 = 9  ,這個9即是最後一碼的檢查碼。

在舉個更簡單的範例,例如 T12354660X 檢查碼應該是 ?
T(27) => 20 / 10 + 7*9 = 65
10-(65 + 1*8 + 2*7 + 3*6 + 5*5 + 4*4 + 6*3 + 6*2 + 0*1)%10 => 4

因此完整的身分證字號應該是 T123546604

這邊提供一個檢查的公式
X = Y + x8 * 8 + x7 * 7 + x6 * 6 + x5 * 5 + x4 * 4 + x3 * 3 + x2 * 2 + x1 * 1 + Z
X除以10,必定餘0 。我們在來檢查剛剛的範例吧
(65 + 8 + 14 + 18 + 25 +16 +18 +12 + 0 + 4 )% 10 = 0

網路上也有提供不同的方式,他們是定義成
X1+X2D1D2D3D4D5D6D7D8D9
A123456789
十位數字為X1
個位數字為X2
性別編號1編號2編號3編號4編號5編號6編號7檢查碼

Y = X1 + 9*X2 + 8*D1 + 7*D2 + 6*D3 + 5*D4 + 4*D5 + 3*D6 + 2*D7+ 1*D8 + D9
Y除以10,若餘0,則是沒問題的身分證字號。

以上兩種方式只是對於數字的定義不同,沒什麼差異,只是我習慣用上面的方式。


關於身分證:
* 身分證的歷史 : 在民國五十四年才有配給台灣民眾身分證,當時使用的只有9碼,開頭的英文以及八碼的數字,而且到了14歲才能獲的配號;到了民國五十八年新增了檢查碼,也就是上面提到的第九碼,提供基礎的驗證之用;到了民國六十年,初生的嬰兒就能獲得身分證配號,五十四年則是到14歲才能獲得配號,但是能然必須要年滿14歲才能領取身分證。

*有關於英文字母的方面,有人說從此可以看出戶籍地,但是卻不是必然的,因為民國六年年以前的出生者是依照戶籍地而定,然而六十年以後的民眾是依照申報戶口的戶政事務所所在的縣市,來決定英文代號。



程式設計概念:
非常的基礎簡單,只要會亂數,就能夠寫的出來,實在太簡單了,這邊就... 不敘述了。

所需程式技能:
1. 字串或陣列概念(用來儲存身分證字號)
2. 亂數

引導:
1.可以先提供使用者選擇英文代碼,或者亂數產生
2.選定性別 , 或是亂數產生 (可以 rand()%2 + 1的方式來產生)
3.隨機給予亂數7碼
4.計算檢查號
5.輸出

 

arrow
arrow
    全站熱搜

    returnbool 發表在 痞客邦 留言(0) 人氣()