身分證字號解析
範例: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 ;
}
分解算式:
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 ;
}
留言
張貼留言