2010年11月1日 星期一

身分證檢驗

內容 : 正體->简体
我國的身分證字號有底下這樣的規則,因此對於任意輸入的身分證字號可以有一些基本的判斷原則,請您來判斷一個身分證字號是否是正常的號碼(不代表確有此號、此人)。

(1) 英文代號以下表轉換成數字

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 台南縣

(2) 英文轉成的數字, 個位數乘9再加上十位數的數字

(3) 各數字從右到左依次乘1、2、3、4....8

(4) 求出(2),(3) 及最後一碼的和

(5) (4)除10 若整除,則為 real,否則為 fake

例: T112663836

2 + 7*9 + 1*8 + 1*7 + 2*6 + 6*5 + 6*4 + 3*3 + 8*2 + 3*1 + 6 = 180

除以 10 整除,因此為 real

輸入說明 :
一組身分證號碼
輸出說明 :
輸出 real or fake
範例輸入 :

T112663836
S154287863
範例輸出 :

real
fake

3 則留言:

  1. Dim StrQ As String, sum As Long
    Private Sub Form_Load()
    Me.Hide
    Open App.Path & "\in.txt" For Input As #1
    Open App.Path & "\out.txt" For Output As #2
    While Not EOF(1)
    Line Input #1, StrQ
    strA = "ABCDEFGHJKLMNPQRSTUVXYWZIO"
    X = Mid(StrQ, 1, 1)
    sum = ((InStr(1, strA, X) + 9) Mod 10) * 9 + (InStr(1, strA, X) + 9) \ 10
    StrQ = StrReverse(Right(StrQ, 10))
    For i = 1 To 8
    sum = sum + Val(Mid(StrQ, i, 1)) * (9 - i)
    Next i
    sum = (sum + Val(Mid(StrQ, 9, 1))) Mod 10
    If sum = 0 Then
    Print #2, "real"
    Else
    Print #2, "fake"
    End If
    Wend
    Close #2
    Close #1
    End
    End Sub



    BY小白

    回覆刪除
  2. Public Sub Form_Load()
    Me.Hide
    Open App.Path & "\in.txt" For Input As #1
    Open App.Path & "\out.txt" For Output As #2
    country = "1011121314151617341819202122352324252627282932303133"
    Do Until EOF(1)
    Line Input #1, step
    coun = Left(step, 1)
    cnum = Mid(country, (Asc(coun) - 65) * 2 + 1, 2)
    num = Val(Left(cnum, 1)) + Val(Right(cnum, 1)) * 9
    For i = 2 To Len(step) - 1
    num = num + Val(Mid(step, i, 1)) * (10 - i)
    Next i
    num = num + Val(Right(step, 1))
    If num Mod 10 = 0 Then
    Print #2, " real"
    Else
    Print #2, " fake"
    End If
    Loop
    Close #2
    Close #1
    End
    End Sub

    BY Yung

    回覆刪除
  3. 兩個程式都沒什麼問題。
    但是,這題說明中,並沒有對男女生的代號,做說明。
    那麼就不用理它。(雖然知道1是男生,2是女生)

    回覆刪除