身分證字號解析

範例:S101446784

分解算式:
S = 56(PS參考列表中的值)
1 = 1 * 8 = 8   + 56   = 64
0 = 0 * 7 = 0   + 64   = 64
1 = 1 * 6 = 6   + 64   = 70
4 = 4 * 5 = 20 + 70   = 90
4 = 4 * 4 = 16 + 90   = 106
6 = 6 * 3 = 18 + 94   = 124
7 = 7 * 2 = 14 + 112 = 138
8 = 8 * 1 = 8   + 138 = 146
4 = 4 + 146 = 150
150 / 10 求餘數是否為0如果是的話則此身分證為正確

參考列表:
值        代碼區分
----------------------
1        台北市A
10        台中市B
19        基隆市C
28        台南市D
37        高雄市E
46        台北縣F
55        宜蘭縣G
64        桃園縣H
39        嘉義市I
73        新竹縣J
82        苗栗縣K
2        台中縣L
11        南投縣M
20        彰化縣N
48        新竹市O
29        雲林縣P
38        嘉義縣Q
47        台南縣R
56        高雄縣S
65        屏東縣T
74        花蓮縣U
83        台東縣V
21        金門縣W
3        澎湖縣X
12        陽明山Y
30        連江縣Z

C#
public bool ChkID(String strID)
{
        // 英文字母代號對應 A-Z
        //               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
        int[] intSID = { 1, 10, 19, 28, 37, 46, 55, 64, 39, 73, 82, 2, 11, 20, 48, 29, 38, 47, 56, 65, 74, 83, 21, 3, 12, 30 };
        // 加總計算用
        int SumCH = 0; 
        // 轉換成大寫
        strID.ToUpper();
         
        // 驗證英文字母及第二碼數字
        System.Text.RegularExpressions.Regex Chk = new System.Text.RegularExpressions.Regex(@"^[A-Za-z]+$");
        // 字串格式判斷
        if (Chk.IsMatch(strID.Substring(0, 1)) == false |  // 判斷英文字母第一碼是否為英文
                Convert.ToInt16(strID.Substring(1, 1)) > 2 |   // 第二碼數字超過2
                Convert.ToInt16(strID.Length) > 10)            // 身分證字號大於10碼
        {
                return false;
        }
        // 將英文字母轉為Ascii來對應intSID
        System.Text.ASCIIEncoding asciiEncoding = new System.Text.ASCIIEncoding();
        // 將轉好的Ascii數字-65就來對照intSID陣列值的位置
        SumCH = intSID[(int)asciiEncoding.GetBytes(strID.Substring(0, 1))[0] - 65];
        // 反向回圈加總每一碼
        for (int i = 8; i >= 1; i--)
        {
                SumCH = SumCH + (Convert.ToInt16(strID.Substring(9 - i, 1)) * i);
        }
        // 判斷所有加總後的值 + 最尾碼的ID後 / 10 餘數如果為0則正確
        return ((Convert.ToInt16(strID.Substring(9, 1)) + SumCH) % 10 == 0);

}

JavaScript
function Fun_idCheck(id)

 var fResult=false;
 var value = 0;
 var sId=id;
 if(sId.length==10)
 {
 if((sId.charAt(0)=='A') || (sId.charAt(0)=='a')) value=10
 else if((sId.charAt(0)=='B') || (sId.charAt(0)=='b')) value=11
 else if((sId.charAt(0)=='C') || (sId.charAt(0)=='c')) value=12
 else if((sId.charAt(0)=='D') || (sId.charAt(0)=='d')) value=13
 else if((sId.charAt(0)=='E') || (sId.charAt(0)=='e')) value=14
 else if((sId.charAt(0)=='F') || (sId.charAt(0)=='f')) value=15
 else if((sId.charAt(0)=='G') || (sId.charAt(0)=='g')) value=16
 else if((sId.charAt(0)=='H') || (sId.charAt(0)=='h')) value=17
 else if((sId.charAt(0)=='J') || (sId.charAt(0)=='j')) value=18
 else if((sId.charAt(0)=='K') || (sId.charAt(0)=='k')) value=19
 else if((sId.charAt(0)=='L') || (sId.charAt(0)=='l')) value=20
 else if((sId.charAt(0)=='M') || (sId.charAt(0)=='m')) value=21
 else if((sId.charAt(0)=='N') || (sId.charAt(0)=='n')) value=22
 else if((sId.charAt(0)=='P') || (sId.charAt(0)=='p')) value=23
 else if((sId.charAt(0)=='Q') || (sId.charAt(0)=='q')) value=24
 else if((sId.charAt(0)=='R') || (sId.charAt(0)=='r')) value=25
 else if((sId.charAt(0)=='S') || (sId.charAt(0)=='s')) value=26
 else if((sId.charAt(0)=='T') || (sId.charAt(0)=='t')) value=27
 else if((sId.charAt(0)=='U') || (sId.charAt(0)=='u')) value=28
 else if((sId.charAt(0)=='V') || (sId.charAt(0)=='v')) value=29
 else if((sId.charAt(0)=='X') || (sId.charAt(0)=='x')) value=30
 else if((sId.charAt(0)=='Y') || (sId.charAt(0)=='y')) value=31
 else if((sId.charAt(0)=='W') || (sId.charAt(0)=='w')) value=32
 else if((sId.charAt(0)=='Z') || (sId.charAt(0)=='z')) value=33
 else if((sId.charAt(0)=='I') || (sId.charAt(0)=='i')) value=34
 else if((sId.charAt(0)=='O') || (sId.charAt(0)=='o')) value=35
 if(value > 0)
 {
 value = Math.floor(value/10) + (value%10) * 9 +
 parseInt(sId.charAt(1)) * 8 +
 parseInt(sId.charAt(2)) * 7 +
 parseInt(sId.charAt(3)) * 6 + 
 parseInt(sId.charAt(4)) * 5 +
 parseInt(sId.charAt(5)) * 4 +
 parseInt(sId.charAt(6)) * 3 +
 parseInt(sId.charAt(7)) * 2 +
 parseInt(sId.charAt(8)) + parseInt(sId.charAt(9)) ; 
 value = value % 10 ;
 if(value==0) fResult = true ;
 } 
 } 
 return fResult ;

}

留言

這個網誌中的熱門文章

delivery note和delivery order的區別和翻譯

Eclipse 3.6.1 Helios 中文化方法

牙技專業英文--技工篇