C#台湾身份证合法性验证

國民身分證統一編號檢查方法 字母 A B C D E F G H I J K L
國民身分證統一編號檢查方法

字母
數值 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

以國民身分證統一編號B120667503為例:           區性       檢           域別       查           碼碼       碼 一、找出第一位英文字母的對應數值。 二、對應數值之個位數值乘以9,再加上十位數之值,其總和再除以10,所得之餘數為個位對應值:   例:B之對應數值為11,則其個位對應值=0   因為:【1+(1×9)】÷10,其餘數為0 三、經前述步驟將第一位英文字母轉換後,產生一個十位數字的數列:   如:B1206675030120667503 四、再將這一數列依序乘以1、8、7、6、5、4、3、2、1   0×1=00   1×8=08   2×7=14   0×6=00   6×5=30   6×4=24   7×3=21   5×2=10   0×1=00      ―――      107 五、再將此總和值除以10,再取其餘數   107÷10 餘數7 六、再取這一餘數之補數   7之補數為3

七、3與檢查碼相符,此國民身分證統一編號符合邏輯檢查。

#region 臺灣身份證號碼驗證 private bool CheckIDCard_CHT(string IDCard) { string strFirstCode=""; if(IDCard.Length!=10) { return false;//长度必需为10 } if(IDCard.Substring(1,1)!="1"&&IDCard.Substring(1,1)!="2") { return false;//第二位必需是1=男或者2=女 } switch(IDCard.Substring(0,1)) { case "A": strFirstCode="10"; break; case "B": strFirstCode="11"; break; case "C": strFirstCode="12"; break; case "D": strFirstCode="13"; break; case "E": strFirstCode="14"; break; case "F": strFirstCode="15"; break; case "G": strFirstCode="16"; break; case "H": strFirstCode="17"; break; case "I": strFirstCode="34"; break; case "J": strFirstCode="18"; break; case "K": strFirstCode="19"; break; case "L": strFirstCode="20"; break; case "M": strFirstCode="21"; break; case "N": strFirstCode="22"; break; case "O": strFirstCode="35"; break; case "P": strFirstCode="23"; break; case "Q": strFirstCode="24"; break; case "R": strFirstCode="25"; break; case "S": strFirstCode="26"; break; case "T": strFirstCode="27"; break; case "U": strFirstCode="28"; break; case "V": strFirstCode="29"; break; case "W": strFirstCode="32"; break; case "X": strFirstCode="30"; break; case "Y": strFirstCode="31"; break; case "Z": strFirstCode="33"; break; default: return false; } int iAllNum=Convert.ToInt32(strFirstCode.Substring(0,1))+ Convert.ToInt32(strFirstCode.Substring(1,1))*9+ Convert.ToInt32(IDCard.Substring(1,1))*8+ Convert.ToInt32(IDCard.Substring(2,1))*7+ Convert.ToInt32(IDCard.Substring(3,1))*6+ Convert.ToInt32(IDCard.Substring(4,1))*5+ Convert.ToInt32(IDCard.Substring(5,1))*4+ Convert.ToInt32(IDCard.Substring(6,1))*3+ Convert.ToInt32(IDCard.Substring(7,1))*2+ Convert.ToInt32(IDCard.Substring(8,1))*1+ Convert.ToInt32(IDCard.Substring(9,1))*1; if(iAllNum%10!=0) { return false; } return true; } #endregion